2016-11-09 44 views
0

呼吁一个诺言和一个非诺言我有一个承诺,aPromise调用一个服务器,和一个非诺言,notAPromise这是所谓的同步,我需要打电话,然后做一些事情结果。我有这个,但不知道它是做Promise.all

Promise.all([aPromise(), Promise.method(notAPromise)()]) 
.spread(function(result1, result2) { 
    //do something with results 
}) 
.catch(function(error) { 
    //do something with error 
}); 

那么,是否可以把同步notAPromise在Promise.all的最好的事情还是应该在外面?

这种方式的好处是,如果aPromise需要一段时间从服务器返回,notAPromise将在返回时完成。或者换句话说,我们不必等到同步notAPromise在调用服务器之前完成。

有没有更好的方法我应该写这段代码?

编辑: 而不是返回一个结果,如果没有显示改变某种状态,但我只希望新的状态,如果aPromise成功返回也可能有问题。如果aPromise抛出但没有完成,我们将会进入新的状态吗?

+0

Promise可以异步执行,所以你不需要在promise.all中插入非promise函数 –

回答

3

你的代码是绝对好的(甚至可以处理notAPromise会抛出的情况)。然而,通常一个人会简单地写

aPromise().then(function(result1) { 
    var result2 = notAPromise(); 
    //do something with results 
}).… 

当我们不关心什么顺序或什么时候调用这两个函数。预计同步notAPromise需要一段不显着的执行时间,如果它很重要(并且应该能够与其他事件并行运行),它应该是异步的。