受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
});
希望这可以帮助。