Javascript 如何从Node.js中的函数返回状态码
我有这样的功能:Javascript 如何从Node.js中的函数返回状态码,javascript,node.js,http-status-codes,Javascript,Node.js,Http Status Codes,我有这样的功能: function getStatusCode(site){ var options = { host: "127.0.0.1", port: 8000, path: site, headers: { Host: site } }; var status; http.get(options, function(
function getStatusCode(site){
var options = {
host: "127.0.0.1",
port: 8000,
path: site,
headers: {
Host: site
}
};
var status;
http.get(options, function(response) {
status=response.statusCode;
});
return status;
}
如何仅在http.get finish work时返回状态,或在超时时返回null(例如10秒)?node.js背后的整个思想是它的异步性质。您试图做的是通过尝试使其同步来违反设计模式,而设计模式正是其根源所在 由于
get
方法的异步性质,您无法执行此操作。只能在回调函数内操作状态代码。因此,您的getStatusCode
不需要返回任何内容。您可以使其接受一个附加参数,该参数将表示在结果可用时调用的回调:
function getStatusCode(site, callback) {
var options = {
host: "127.0.0.1",
port: 8000,
path: site,
headers: {
Host: site
}
};
http.get(options, function(response) {
callback(response.statusCode);
});
}
然后:
getStatusCode('http://...', function(statusCode) {
alert(statusCode);
});
node.js背后的全部思想是它的异步性质。您试图做的是通过尝试使其同步来违反设计模式,而设计模式正是其根源所在 由于
get
方法的异步性质,您无法执行此操作。只能在回调函数内操作状态代码。因此,您的getStatusCode
不需要返回任何内容。您可以使其接受一个附加参数,该参数将表示在结果可用时调用的回调:
function getStatusCode(site, callback) {
var options = {
host: "127.0.0.1",
port: 8000,
path: site,
headers: {
Host: site
}
};
http.get(options, function(response) {
callback(response.statusCode);
});
}
然后:
getStatusCode('http://...', function(statusCode) {
alert(statusCode);
});
您不能“返回”它本身,因为这需要i/o上的功能块,这是一个节点号。相反,您可以向它传递一个回调函数,该函数将用您的状态代码调用
function getStatusCode(site, callback){
var options = {
host: "127.0.0.1",
port: 8000,
path: site,
headers: {
Host: site
}
};
var status;
http.get(options, function(response) {
status=response.statusCode;
callback(status);
});
}
您不能“返回”它本身,因为这需要i/o上的功能块,这是一个节点号。相反,您可以向它传递一个回调函数,该函数将用您的状态代码调用
function getStatusCode(site, callback){
var options = {
host: "127.0.0.1",
port: 8000,
path: site,
headers: {
Host: site
}
};
var status;
http.get(options, function(response) {
status=response.statusCode;
callback(status);
});
}
所提出的方法不能很好地扩展,尤其是当您需要错误处理时:在复杂的情况下,您将得到大量的lambdas。所以上面的例子应该像入门教程一样对待,不应该在生产中使用 可以使用
return
异步返回值,但不应返回值,而应返回某种类型的延续。未来和承诺就是这种延续的一个例子。寻找提供它们的NPM库。有关示例,请参见q
和q-http
库
另见以下相关问题:
我认为q
库之所以与众不同,是因为它有姐妹库(q-io
,q-http
),使用promises实现了大多数标准node.js库
事实上,早期的节点标准库使用承诺,但后来他们决定使用回调。这并不是因为承诺不好,而是因为回调级别较低。建议的方法不能很好地扩展,特别是当您需要错误处理时:在复杂的情况下,您会得到大量的lambdas。所以上面的例子应该像入门教程一样对待,不应该在生产中使用 可以使用
return
异步返回值,但不应返回值,而应返回某种类型的延续。未来和承诺就是这种延续的一个例子。寻找提供它们的NPM库。有关示例,请参见q
和q-http
库
另见以下相关问题:
我认为q
库之所以与众不同,是因为它有姐妹库(q-io
,q-http
),使用promises实现了大多数标准node.js库
事实上,早期的节点标准库使用承诺,但后来他们决定使用回调。这并不是因为承诺不好,而是因为回访级别较低。我会重新思考您试图做什么。看起来你想要一个同步的
getStatusCode
函数,但这不是通常的做法。我会重新考虑你想做什么。看起来您需要一个同步getStatusCode
函数,但这不是通常的做法。您忘记添加错误处理<代码>http.get(选项,函数(res){//callback}).on('error',函数(e){//error handling})代码>您忘记添加错误处理<代码>http.get(选项,函数(res){//callback}).on('error',函数(e){//error handling})代码>