Hon*_*oni 6 javascript events promise deferred when-js
关于这个jsFiddle,我试图动态添加一个事件触发时创建的"延迟",所以只有当所有延迟被解析时才会调用完成的回调,包括后来添加的那些:
相关代码:
var promises = [ deferred1, ... ];
var p = when.all(promises).then(function() {
console.log('All done!!');
//! trigger
});
promises.push( deferredFromEvent ); // << ignored
Run Code Online (Sandbox Code Playgroud)
更新:欢迎使用Q或jQuery的建议,我正在寻找一个有效的建议
预先做出您知道需要的所有承诺。和他们一起建造一个.when。保存从返回的承诺.when。当您添加需要新 Promise 的新事件时,请.when使用之前的 Promise.when以及您已完成的任何新 Promise 添加新的 Promise。
single points of failure如果您使用最后一个.when作为“继续使用该应用程序”,您的应用程序将有多个。IE:如果任何一个承诺在任何时候失败,那么.when在此之后创建的任何承诺也将失败。
...但是如果这是您的意图,或者您有一些可靠的错误处理,那么它应该可以满足您的要求。
我试图保持这个库无关——通常,我使用我自己的实现,它介于 jQuery 所做的事情和 Crockford 在最近的演讲中所做的事情之间,但如果我们假设:
函数返回promise-handlers
“当”返回一个promise-handler时promise-handlers至少有一个.doneand——.fail或者接受两个参数,或者函数内部发生的任何事情将控制promise是否是rejected/resolvedor kept/broken(或其他),然后你最终可能会得到一堆如下所示的功能:
var doing = doSomething(), // returns promise
making = makeSomething(), // returns promise
loading = loadSomething(), // returns promise
dependencies_lvl_1 = when(doing, making, loading);
Run Code Online (Sandbox Code Playgroud)
稍后,您可能会添加一个新的模块或小部件——也许它可以节省一些工作:
var saving = saveSomething(), //returns promise
dependencies_lvl_2 = when(dependencies_lvl_1, saving);
Run Code Online (Sandbox Code Playgroud)
也许之后,你需要切换页面,但你需要先缓存你的数据
var caching = cacheData(), // returns promise
when(dependencies_lvl_2, caching)
.done(goToNextPage)
.fail(handleError);
Run Code Online (Sandbox Code Playgroud)
如果你看一下它,你就会知道一个事实,只要when返回一个承诺,只有在所有承诺都得到遵守时(并且所有承诺都得到遵守时)才会成功,并且没有一个承诺被破坏,那么就dependencies_lvl_2包括来自 的所有依赖项dependencies_lvl_1,加上额外的承诺。
那么, level-3.when的分辨率取决于已添加到链中的每一个事物。
只要你继续将你的承诺缓存到变量中(或某种未来访问),你就可以继续将它们链接在一起,直到永恒。
| 归档时间: |
|
| 查看次数: |
3438 次 |
| 最近记录: |