javascript - 使用 deferred.resolve(value) 返回到我的 .then() 的值未定义

标签 javascript node.js asynchronous q deferred

我使用 Q.js 来调用一个 api,在我的主函数中使用如下两个循环

    for i..10
     for i...5
         var promise = getLoc(x,y);
         promise.then(function(value) {
             //value is undefined...
         }

在我的 getLoc 函数中有

    function getLoc(x,y) {
      var value;
      var deferred = Q.defer();
      Q.ninvoke(request, 'get', {

      }).spread(function(response, body) {
        value = body;
      });

      defferred.resolve(value);
      return deferred.promise
    }

为什么我传递给 then 函数的值没有定义?我如何传递我的解析值?谢谢!

最佳答案

您必须在异步回调中调用 resolve(),因为该回调会在将来某个时间调用,因此这是唯一已知值的地方:

function getLoc(x,y) {
  var deferred = Q.defer();
  Q.ninvoke(request, 'get', {  // ... other options here
  }).spread(function(response, body) {
     deferred.resolve(body);
  });

  return deferred.promise;
}

您试图在调用异步回调之前返回该值,因此它始终是 undefined

或者,由于 Q.ninvoke() 返回了一个 promise,您可以这样做并避免常见的延迟反模式:

function getLoc(x,y) {
  return Q.ninvoke(request, 'get', {  // ... other options here
  }).spread(function(response, body) {
     return body;
  });
}

关于javascript - 使用 deferred.resolve(value) 返回到我的 .then() 的值未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36190413/

相关文章:

javascript - 如何使用 Angular Material 在绝对位置创建可折叠 div

javascript - Webpack服务器的路由无法获取/页面

javascript - node.js 将表情符号转换为 unicode 或其他?

c# - .NET 中 yield 和 await 如何实现控制流?

javascript - 如何使用多个输入字段和一个更新按钮更新 Meteor 中的文档

php - xhtml 的全页所见即所得编辑器?

javascript - 在使用 puppeteer 进行脚本评估之前注入(inject) HTML

javascript - octokit getLabel 返回 TypeError : callback. 绑定(bind)不是函数

android - RxJava2 : execute an async function for every item in a list and wait for callback

scala - Akka Actor 询问和类型安全