使用 Q 承诺在 node.js 中链接 GET 请求



我正在尝试将一系列GET请求链接在一起。 它们是一系列 API 调用,依赖于以前调用的数据。 我对承诺的理解是,我应该能够制作一个扁平的 .then() 链,但是当我尝试这样做时,我的 functions/console.logs 没有以正确的顺序执行,所以我目前有一个不断增长的厄运金字塔:

var request = require('request');
var deferredGet = Q.nfbind(request);
deferredGet(*params*)
  .then(function(response){
  // process data from body and add it to the userAccount object which I am modifying.
    return userAccount;
  })
  .then(function(userAccount){
    deferredGet(*params*)
      .then(function(response){
        //process data from body and add to userAccount
        return userAccount;
    })
    .then(function..... // There's a total of 7 API calls I need to chain, and it's already getting unwieldy.

我知道你应该回报一个承诺,也许我应该回报deferredGet,但当我试图这样做时,我没有回报任何东西。 此外,传递到第一个then的参数是响应,而不是承诺。 所以我不知道该何去何从,但我觉得我做错了。

提前感谢!

你是对的,你应该返回deferredGet.但是,请注意,返回的内容仍然是一个承诺。因此,之后您应该继续链接.then调用。

var request = require('request');
var deferredGet = Q.nfbind(request);
deferredGet(*params*)
  .then(function(response){
    // process data from body and add it to the userAccount object which I am modifying.
    return userAccount;
  })
  .then(function(userAccount){
    return deferredGet(*params*);
  })
  .then(function(response){
    // response should be the resolved value of the promise returned in the handler above.
    return userAccount;
  })
  .then(function (userAccount) {
    //...
  });

当您从then处理程序中返回承诺时,Q 将使其成为链的一部分。如果从处理程序返回原始值,Q 将做出一个隐含的承诺,该承诺会立即使用该原始值进行解析,就像您在第一个处理程序中看到的userAccount一样。

看看我为你整理的这个工作示例:)

相关内容

  • 没有找到相关文章

最新更新