让nodejs同步调用
make nodejs call synchronously
我希望以下 nodejs 运行 在最后同步打印第二个 console.log 命令。
我这里查了很多解决方案,请提供解决方案。
var request = require('request')
var op=[];
request({ uri: 'http://api.usergrid.com/siddharth1/sandbox/volvos/John' }, function(err, response, body){
// use body
//console.log(body);
var body2 = JSON.parse(body);
op = body2.entities.map(function(item) {
return item.name;
});
console.log("inside log "+op);
})
console.log("outside log "+op);
您正在尝试解决错误的问题。您不希望此代码同步 运行,您只想 运行 console.log
在收到 响应后。这很简单。
var request = require('request')
request({ uri: 'http://api.usergrid.com/siddharth1/sandbox/volvos/John' }, function(err, response, body) {
// use body
//console.log(body);
var body2 = JSON.parse(body);
var op = body2.entities.map(function(item) {
return item.name;
});
console.log("log "+op);
})
强制请求同步不是"Node-like",这是非常糟糕的做法*除非你有很好的理由这样做(提示:你没有); Node 是单线程的,强制请求同步会使请求阻塞,您将失去实际使用 Node 的任何好处。不要那样做。
我不确定你为什么需要两个 console.logs,也许你误解了对你的要求。
至于为什么不能有console.log
outside调用request
的原因:你传给[=13的函数=] 不会立即执行,它会在未来的某个时刻执行,但永远不会立即执行。这意味着在调用 request
之后执行的任何代码将始终在 在 您传递给 request
的函数之前执行。
这是 Node 的基本模式:所有 I/O 默认情况下都有此行为。
总而言之:您可能误解了这个问题,或者问您这个问题的人有意让您得出您想要的不可能(或者当然不推荐)的结论
我希望以下 nodejs 运行 在最后同步打印第二个 console.log 命令。
我这里查了很多解决方案,请提供解决方案。
var request = require('request')
var op=[];
request({ uri: 'http://api.usergrid.com/siddharth1/sandbox/volvos/John' }, function(err, response, body){
// use body
//console.log(body);
var body2 = JSON.parse(body);
op = body2.entities.map(function(item) {
return item.name;
});
console.log("inside log "+op);
})
console.log("outside log "+op);
您正在尝试解决错误的问题。您不希望此代码同步 运行,您只想 运行 console.log
在收到 响应后。这很简单。
var request = require('request')
request({ uri: 'http://api.usergrid.com/siddharth1/sandbox/volvos/John' }, function(err, response, body) {
// use body
//console.log(body);
var body2 = JSON.parse(body);
var op = body2.entities.map(function(item) {
return item.name;
});
console.log("log "+op);
})
强制请求同步不是"Node-like",这是非常糟糕的做法*除非你有很好的理由这样做(提示:你没有); Node 是单线程的,强制请求同步会使请求阻塞,您将失去实际使用 Node 的任何好处。不要那样做。
我不确定你为什么需要两个 console.logs,也许你误解了对你的要求。
至于为什么不能有console.log
outside调用request
的原因:你传给[=13的函数=] 不会立即执行,它会在未来的某个时刻执行,但永远不会立即执行。这意味着在调用 request
之后执行的任何代码将始终在 在 您传递给 request
的函数之前执行。
这是 Node 的基本模式:所有 I/O 默认情况下都有此行为。
总而言之:您可能误解了这个问题,或者问您这个问题的人有意让您得出您想要的不可能(或者当然不推荐)的结论