如何解决遍历加载函数-完成所有操作后回调吗?
遍历加载函数时,一旦全部完成,是否可以运行回调?
所有加载函数似乎都在同时运行,因此当最长的加载完成时,我无法运行回调。
$.each( preloadedArray[entryId],function( key,value ) {
preloadedArray[entryId][key].on('load',function() {
// loaded
});
// When all have loaded...?
});
解决方法
经典的jQuery方式是将$.Deferred
对象(每个异步函数调用一个)收集到一个数组中,然后等待它们解析。
var pendingResults = [];
$.each(preloadedArray[entryId],function( key,value ) {
var result = $.Deferred();
pendingResults.push(result.promise());
preloadedArray[entryId][key].on('load',function() {
// ...do work...
// loaded
result.resolve();
});
});
$.when.apply($,pendingResults).done(function () {
console.log("all done");
});
在现代JS中,您可以本着相同的精神使用new Promise()
和Promise.all()
。重写为承诺的.map()
,但功能与上面相同:
var pendingResults = preloadedArray[entryId].map(value => {
return new Promise(function (resolve,reject) {
value.on('load',function() {
// ...
// loaded
resolve();
});
});
});
Promise.all(pendingResults).then(function () {
console.log("all finished");
});
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。