承诺Js:等到承诺实现

时间:2016-03-03 23:18:53

标签: javascript node.js promise bluebird

我正在使用Bluebird来处理Node.Js中的promise,并且想知道如何在履行承诺(完成)时返回函数。我想要的行为是:

function getItem(){
  functionReturningPromise.then(function(result){
    //do some operation on result
    return result;
  });
}

但是,由于承诺未在执行时完成,因此上述实现不会返回任何内容。围绕这个最好的解决方法是什么?

getItem的目的是修改functionReturningPromise返回的任何内容,然后返回它

2 个答案:

答案 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;
}