我正在使用请求承诺模块,并未发现如何链接请求。我目前正在遵循他们的语法:
request({options})
.then(function(result){...})
.catch(function(error){...})
但是我希望能够使用Promise.all并尝试同时进行多个调用并等待它们全部解析,然后继续进行其他调用。例如,我想:
此外,我一直在使用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概念,并尝试将它们与请求承诺一起使用。
答案 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
回调代码路径。