我正在尝试使用Bluebird库为nodejs编写一个promise函数。我想从我的函数中返回2个变量。 我希望第一个函数立即返回,第二个函数在返回之前完成自己的promise链。
function mainfunction() {
return callHelperfunction()
.then(function (data) {
//do something with data
//send 200 Ok to user
})
.then(function (data2) {
//wait for response from startthisfunction here
})
.catch(function (err) {
//handle errors
});
}
function callHelperfunction() {
return anotherHelperFunction()
.then(function (data) {
return data;
return startthisfunction(data)
.then(function () {
//do something more!
})
});
}
答案 0 :(得分:5)
就像常规函数只有一个返回值一样,类似的promises只能解析一个值,因为它是相同的类比。
与常规函数一样,您可以从promise返回复合值,如果返回数组,也可以使用.spread
来使用它:
Promise.resolve().then(function(el){
return [Promise.resolve(1), Promise.delay(1000).return(2));
}).spread(function(val1, val2){
// two values can be accessed here
console.log(val1, val2); // 1, 2
});
答案 1 :(得分:1)
唯一看似错误的是do something with data; send 200 Ok to user;
应该在mainfunction()
中执行,期望callHelperfunction()
中的承诺链。
这可以通过多种方式克服。这是一对夫妇:
<强> 1。将do something with data; send 200 Ok to user;
移至callHelperfunction()
function mainfunction() {
return callHelperfunction())
.catch(function (err) {
//handle errors
});
}
function callHelperfunction() {
return anotherHelperFunction()
.then(function (data1) {
//do something with data
//send 200 Ok to user
return startthisfunction(data1)
.then(function (data2) {
//wait for response from startthisfunction here
//do something more!
});
});
}
<强> 2。完全取消callHelperfunction()
,并在mainfunction()
function mainfunction() {
return anotherHelperFunction()
.then(function (data1) {
//do something with data1
//send 200 Ok to user
return startthisfunction(data1);
})
.then(function (data2) {
//wait for response from startthisfunction here
})
.catch(function (err) {
//handle errors
});
}