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
本身不能失败。