Ich habe einige Stellen in Komponententests gesehen, in denen eine Funktion eine q.allSettled()
Zusage von einem Funktionsaufruf zurückgibt, und es gibt ein .fail
, das dem Versprechen beigefügt ist. Aber .allSettled
wird .then
aufrufen, auch wenn einige/alle Versprechen abgelehnt werden.Schlägt Q.allSettled jemals fehl?
Hier ist ein Beispiel:
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);
});
});
Können Sie einige Beispiele geben, wo .fail
ausgelöst werden würde?
Ich hatte keinen Blick auf die Quelle, aber es ist vorstellbar, dass es fehlschlägt, wenn Sie nicht in einem Array/iterable oder so etwas übergeben. – Bergi
@Bergi, nein es ruft nur '.then' mit einem leeren Array – Shanimal