Q.allSettled是否会失败?

我在unit testing中看到过一些函数返回一个函数调用的q.allSettled() promise的.fail并附有一个.fail 。 但是.then即使某些/所有的承诺被拒绝,所有的人都会打电话给他。

这是一个例子:

 function someFunctionToTest(){ var aRejectedDeferred = Q.defer(); var anotherRejectedDeferred = Q.defer(); var aResolvedDeferred = Q.defer(); aRejectedDeferred.reject(new Error("I'm aRejectedPromise")); anotherRejectedDeferred.reject(new Error("I'm anotherRejectedPromise")); aResolvedDeferred.resolve({awesome:"I'm aResolvedPromise"}); return Q.allSettled([aRejectedDeferred.promise,anotherRejectedDeferred.promise, aResolvedDeferred.promise]) } it('should never fail', function(done) { someFunctionToTest() .then(function (data) { should.equal(data[0].state,'rejected'); should.equal(data[1].state,'rejected'); should.equal(data[2].state,'fulfilled'); // throw(new Error('I will trigger fail!!!')); done(); }) .fail(function (err) { done(err); }); }); 

你能提供一些例子, .fail.fail

Q.allSettled不能失败。 看看Q API说

返回承诺状态快照的一个承诺,但只有在所有原始承诺已经解决,即成为履行或拒绝。

这很清楚,无论你做出什么承诺,你仍然可以得到一个解决的承诺。

在你的具体情况下.then因为例如下面的行.then语句可能会失败

 should.equal(data[0].state,'rejected'); 

这可能会抛出一个断言exception,这将导致失败,你可以捕捉它并运行done(); 这是对testing工具说asynchronous请求已经完成的方式。 但这只是一个猜测。 Q.allSettled本身不能失败。