5

JavaScript での Promises の使用に関するこの(優れた) 議論に触発されて、「 Global storage」コードを使用するときにコールバック税の支払いを避けるために、Deferred を使用して非同期関数と非非同期関数を連鎖させる方法を考え出そうとしています。

これに関連していくつか質問がありますが、文脈は同じなのでここでまとめて質問します。

私がうまくいかないことの 1 つは、非同期ではないものからどのように deferred を作成できるかということです。つまり、どのように値を取得し、promise でラップして、直接返すのでしょうか? ( a -> M<a>)

また、非同期関数をラップして結果を直接返すようにするにはどうすればよいですか? ( (a -> b) -> (a -> M<b>))

最後の質問です。モナド フリークの方へ - この関数の標準名はありますか?[a] -> (a -> M<b>) -> M<[b]>

4

3 に答える 3

5

値を promise にラップするのは、$.when を使用するのと同じくらい簡単です。

var promise = $.when( value );

また、jQuery 1.6 の時点では、非常に単純なチェーン メソッド (パイプ) があります。

var chained = functionThatReturnsAPromise().pipe(function( resolveValue ) {
        return functionThatReturnsAnotherPromise( resolveValue );
    });

chained.done(function() {
    // Both asynchronous operations done in sequence
});

お役に立てれば。

于 2011-08-23T00:53:51.723 に答える