让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.logoutside调用request的原因:你传给[=13的函数=] 不会立即执行,它会在未来的某个时刻执行,但永远不会立即执行。这意味着在调用 request 之后执行的任何代码将始终在 您传递给 request 的函数之前执行。

这是 Node 的基本模式:所有 I/O 默认情况下都有此行为。

总而言之:您可能误解了这个问题,或者问您这个问题的人有意让您得出您想要的不可能(或者当然不推荐)的结论