4

promise から別の promise にエラーを自動的に伝播する方法があるかどうか知りたいですか? IE: ネストされた promise からスローされたエラーをキャッチします。

たとえば、次のコード サンプルでは、​​「internalWorker」のネストされた promise 関数が .fail(function (error) { return deferred.reject(error); }); エラーを伝播するために必要です。この行が含まれていない場合、エラーは先頭にスローされます。(クラッシュしたアプリ)

ネストされたすべての約束に .fail() 関数を追加する必要がないように、エラーを自動的に伝播することは可能でしょうか?

```

function top(input) {
    var deferred = q.defer();

    internalWorker(input).then(function (value) {
        logger.inspectDebug("top success", value);
    }).fail(function (error) {
        return deferred.reject(error);
    });

    return deferred.promise;
}

function internalWorker(input) {
    var deferred = q.defer();

    q.delay(100).then(function () {
        throw new Error("internal worker async error");
    }).fail(function (error) {
        return deferred.reject(error);
    });

    return deferred.promise;
}

top("hello").then(function (value) {
    logger.inspectDebug("outside success", value);
}).fail(function (error) {
    logger.inspectDebug("outside fail", error);
}).done();

```

4

1 に答える 1

2

https://github.com/kriskowal/qを使用している場合、これは意図したとおりに実行されます。

function top(input) {
    return internalWorker(input).then(function (value) {
        logger.inspectDebug("top success", value);
        return value;
    });
}

function internalWorker(input) {
    return q.delay(100).then(function () {
        throw new Error("internal worker async error");
        return value;
    });
}

top("hello").then(function (value) {
    logger.inspectDebug("outside success", value);
}, function (error) {
    logger.inspectDebug("outside fail", error);
}).done();

コールバック内から promise または値を返します。エラーは暗黙のうちに伝播します。

于 2013-10-09T01:27:33.943 に答える