this(在javascript中使用Promises的出色讨论)的启发,我试图弄清楚如何使用Deferred将异步和非异步函数链接在一起,以避免在使用'Global storage时支付回调税的代码。

我有一些与此相关的问题,但由于上下文相同,因此我将在此处一起询问。

我无法解决的一件事是如何从非异步的东西中延迟出来-也就是说,如何获取值,将其包装在promise中并直接返回? (a -> M<a>

另外,我如何接受异步函数并包装它,以便它直接返回结果,但包装在promise中? ((a -> b) -> (a -> M<b>)

最后一个问题,对于单子怪胎-此功能是否有标准名称? [a] -> (a -> M<b>) -> M<[b]>

最佳答案

将值包装为一个承诺就像使用$ .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
});


希望这可以帮助。

07-24 21:57