Return 2 个变量使用 bluebird promises
Return 2 variables using bluebird promises
我正在尝试使用 Node.js 的 Bluebird 库编写一个承诺函数。我想从我的函数中 return 2 个变量。
我希望第一个函数立即 return,第二个函数在 returning 之前完成自己的承诺链。
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!
})
});
}
就像常规函数只有一个 return 值一样,同样的类比,promises 只能用一个值解析。
就像常规函数一样,您可以 return 来自承诺的复合值,如果您 return 一个数组,您也可以使用 .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
});
唯一似乎错误的是 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
});
}
我正在尝试使用 Node.js 的 Bluebird 库编写一个承诺函数。我想从我的函数中 return 2 个变量。 我希望第一个函数立即 return,第二个函数在 returning 之前完成自己的承诺链。
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!
})
});
}
就像常规函数只有一个 return 值一样,同样的类比,promises 只能用一个值解析。
就像常规函数一样,您可以 return 来自承诺的复合值,如果您 return 一个数组,您也可以使用 .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
});
唯一似乎错误的是 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
});
}