javascript - 遅延ではなくプロミスを保存するにはどうすればよいですか?

原文 javascript promise deferred

コールバックIDを使用してリクエストをディスパッチし、Deferredを配列に格納することでiOSネイティブレイヤーと通信するコードがあります。その後、コールバックが来たら、このDeferredを解決または拒否できます。

私のコード:

jsGate = (function () {
    function jsGate() {}
    jsGate._messageCount = 0;
    jsGate._callbackDeferreds = {};
    jsGate.dispatch = function (plugin, method, args) {
        var callbackID, d, message;
        callbackID = this._messageCount;
        message = {
            plugin: plugin,
            method: method,
            "arguments": args,
            callbackID: callbackID
        };
        send(message)
        this._messageCount++;
        d = new Deferred;
        this._callbackDeferreds[callbackID] = d;
        return d.promise;
    };

    jsGate.callBack = function (callbackID, isSuccess, valueOrReason) {
        var d;
        d = this._callbackDeferreds[callbackID];
        if (isSuccess) {
            d.resolve(valueOrReason[0]);
        } else {
            d.reject(valueOrReason[0]);
        }
        return delete this._callbackDeferreds[callbackID];
    };

    return jsGate;
})();


使用例:

jsGate.dispatch("ReadLater", "fetchSomething", []).then(function (value) {
    return console.log(value);
});
return jsGate.dispatch("ReadLater", "asyncError", []).then(function (value) {
    return console.log(value);
}, function (reason) {
    return console.log("Failed: " + reason);
});


A +プロミスを使用するためのベストプラクティスは何ですか?
答え
長い研究の後:奇妙なハックなしでこれを行う明確な方法はありません。 DeferredPromiseの主な違いは、Promiseの結果を外部から操作できないことです。一般に、これは良いアプローチですが、この特定のケースでは、その機能が必要なので、Deferredを使用する必要があります。
関連記事

javascript - ファイルのアップロード時の415(サポートされていないメディアタイプ)

java - xPathを指定すると、JavaFX webViewの要素を強調表示することは可能ですか?

javascript - 警告ボックスのスタイルを変更するには?

javascript - データベースからリストビューにjsonとphpを入力する

javascript - Angular JSフィルターが予期せず機能しますか?

javascript - mvcビューでアクション結果にリダイレクトするにはどうすればよいですか

javascript - 同じ関数でjqueryの異なるレベルのネストされたJSON値にアクセスする

javascript - 透明なHTML / CSSボタンから見えない?

javascript - keypressイベントの入力フィールドにスペースを入れない

javascript - クリックしても、Jsonからのチェックボックスにアラートが表示されない