在 http.get() 请求中定义操作顺序 - sync/async 问题
Defining the order of operations in an http.get() request - sync/async issue
我正在检索作为 URL 参数的网址,然后显示地址 returns 是否为状态代码 200。问题是,它似乎只在几秒钟后才起作用——我第一次 运行 它时,分配 'mystatus' 的代码似乎无法正常工作。我觉得我 运行 处理事情的顺序有问题,但我不确定如何解决它。
var express = require("express");
var moment = require("moment");
var http = require("http");
var express = require("express");
var moment = require("moment");
var http = require("http");
var app=express();
var mystatus="";
app.get('/new/:name*', function(req,res){
//detect if name is a URL
//return output
http.get("http:"+req.params[0], function(thisres){
if (thisres.statusCode != 200){
mystatus = "Could not load";
}
else {
mystatus = "Loaded!";
}
}).on('error', function(e){
console.error(e);
})
res.json({url_part1: req.params.name,
url_part2: req.params[0],
status: mystatus
});
})
app.listen(8080, function(){
console.log("App listening on port 8080")
});
你是 运行 你在 promise 中的代码节点,所以 http.get
和 res.json
同时 运行,所以先完成的那个没关系。
将 res.json
响应移动到 http.get
的承诺正文中,以便它在收到响应时发送响应
var express = require("express");
var moment = require("moment");
var http = require("http");
var express = require("express");
var moment = require("moment");
var http = require("http");
var app=express();
var mystatus="";
app.get('/new/:name*', function(req,res){
//detect if name is a URL
//return output
http.get("http:"+req.params[0], function(thisres){
if (thisres.statusCode != 200){
mystatus = "Could not load";
}
else {
mystatus = "Loaded!";
}
res.json({url_part1: req.params.name,
url_part2: req.params[0],
status: mystatus
});
}).on('error', function(e){
console.error(e);
})
})
app.listen(8080, function(){
console.log("App listening on port 8080")
});
我正在检索作为 URL 参数的网址,然后显示地址 returns 是否为状态代码 200。问题是,它似乎只在几秒钟后才起作用——我第一次 运行 它时,分配 'mystatus' 的代码似乎无法正常工作。我觉得我 运行 处理事情的顺序有问题,但我不确定如何解决它。
var express = require("express");
var moment = require("moment");
var http = require("http");
var express = require("express");
var moment = require("moment");
var http = require("http");
var app=express();
var mystatus="";
app.get('/new/:name*', function(req,res){
//detect if name is a URL
//return output
http.get("http:"+req.params[0], function(thisres){
if (thisres.statusCode != 200){
mystatus = "Could not load";
}
else {
mystatus = "Loaded!";
}
}).on('error', function(e){
console.error(e);
})
res.json({url_part1: req.params.name,
url_part2: req.params[0],
status: mystatus
});
})
app.listen(8080, function(){
console.log("App listening on port 8080")
});
你是 运行 你在 promise 中的代码节点,所以 http.get
和 res.json
同时 运行,所以先完成的那个没关系。
将 res.json
响应移动到 http.get
的承诺正文中,以便它在收到响应时发送响应
var express = require("express");
var moment = require("moment");
var http = require("http");
var express = require("express");
var moment = require("moment");
var http = require("http");
var app=express();
var mystatus="";
app.get('/new/:name*', function(req,res){
//detect if name is a URL
//return output
http.get("http:"+req.params[0], function(thisres){
if (thisres.statusCode != 200){
mystatus = "Could not load";
}
else {
mystatus = "Loaded!";
}
res.json({url_part1: req.params.name,
url_part2: req.params[0],
status: mystatus
});
}).on('error', function(e){
console.error(e);
})
})
app.listen(8080, function(){
console.log("App listening on port 8080")
});