我正在使用Bluebird来处理Node.Js中的promise,并且想知道如何在履行承诺(完成)时返回函数。我想要的行为是:
function getItem(){
functionReturningPromise.then(function(result){
//do some operation on result
return result;
});
}
但是,由于承诺未在执行时完成,因此上述实现不会返回任何内容。围绕这个最好的解决方法是什么?
getItem的目的是修改functionReturningPromise返回的任何内容,然后返回它
答案 0 :(得分:12)
你不能,var value = someAsyncFunction()
是不可能的(至少我们有发电机)。 Promise是病毒式的,一旦你在一个函数中使用Promise,它的调用者必须使用then
和调用者的调用者等等,直到你的主程序。因此,在调用getItem
的函数中,您必须更改此
item = getItem();
do something with item
进入这个
getItem().then(function(item) {
do something with item
})
和getItem
也应该返回一个Promise
function getItem(){
return functionReturningPromise().then(function(result){
//do some operation on result
return result;
});
}
(理论上它也可以是回调,但我更愿意总是回复承诺)。
答案 1 :(得分:-2)
getItem的目的是修改functionReturningPromise返回的任何内容,然后返回它
然后,我认为你可以简单地做
functionReturningPromise.then(getItem);
其中
function getItem(valueFromPromiseResolution){
//do some operation on valueFromPromiseResolution
return whatever;
}