灵感来自this (优秀)关于在 javascript 中使用 Promises 的讨论,我正在尝试弄清楚如何使用 Deferred 将异步和非异步函数链接在一起,以避免在使用我的 ' Global storage 时支付回调税' 代码。
我有一些与此相关的问题,但我会在这里一起问它们,因为上下文是相同的。
我无法解决的一件事是如何从非异步的东西中延迟 - 也就是说,我如何获取一个值,将其包装在 promise 中,然后直接返回它? (a -> M<a>
)
此外,如何获取异步函数并将其包装,以便它直接返回其结果,但包装在 promise 中? ((a -> b) -> (a -> M<b>)
)
最后一个问题,对于单子(monad)怪胎 - 这个函数有标准名称吗? [a] -> (a -> M<b>) -> M<[b]>
最佳答案
将值包装到 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
});
希望这有帮助。
关于jquery - 用 Monadic 咒语召唤 JQuery Deferred,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5569805/