使用BlueBird / Request-Promise链接请求

时间:2016-07-08 00:05:31

标签: javascript promise bluebird

我正在使用请求承诺模块,并未发现如何链接请求。我目前正在遵循他们的语法:

request({options})
  .then(function(result){...})
  .catch(function(error){...})

但是我希望能够使用Promise.all并尝试同时进行多个调用并等待它们全部解析,然后继续进行其他调用。例如,我想:

  1. 拨打一个创建用户的应用。
  2. 在同一时间,拨打电话创建一个地址。
  3. Promise.all([UserCall,AddressCall])。then({function to deal result results))?
  4. 此外,我一直在使用module.exports = {...}中的函数。这是否要求我在出口之外并将它们声明为单独的变量?

    根据我的理解,似乎我必须做类似的事情:

    var UserCall = function(req,res){
      return new Promise(function (resolve, reject){
        request({options})? //To make the call to create a new user?
      // Then something with resolve and reject
    

    非常感谢任何帮助。我想我可能会混淆基本的BlueBird概念,并尝试将它们与请求承诺一起使用。

2 个答案:

答案 0 :(得分:2)

你走了:

var BPromise = require('bluebird');
var rp = require('request-promise');

BPromise.all([
    rp(optionsForRequest1),
    rp(optionsForRequest2)
])
    .spread(function (responseRequest1, responseRequest2) {
        // Proceed with other calls...
    })
    .catch(function (err) {
        // Will be called if at least one request fails.
    });

答案 1 :(得分:-1)

如您所说,您可以使用all API完成此操作。

请参阅此处的文档:http://bluebirdjs.com/docs/api/promise.all.html

示例:

    var self = this;
    return new Promise(function(resolve) {
        Promise.all([self.createUser, self.createAddress])done(
            // code path when all promises are completed
            // OR should any 1 promise return with reject()
            function() { resolve(); }
        );
    })

如代码中所述,当.all()中任何一个定义的promise被拒绝时,也会调用promises回调代码路径。