如何知道什么时候所有的承诺都被拒绝了,或者用基本的js承诺解决了
How to know when all promises have been rejected or resolved with basic js promises
我正在尝试切换到使用基本JS承诺异步加载我的web应用程序中的所有资源。
下面是我用来加载所有.js文件的ScriptLoader:
function ScriptLoader() {
this.promises = [];
this.add = function(url, doneFunc) {
var promise = new Promise(function(resolve, reject) {
var script = document.createElement('script');
script.src = url;
script.addEventListener('load', function() {
resolve(script);
if(doneFunc)
doneFunc(true);
}, false);
script.addEventListener('error', function() {
reject(script);
if(doneFunc)
doneFunc();
console.log(url + ' was rej');
}, false);
document.head.appendChild(script);
});
this.promises.push(promise);
};
}
我调用这个函数来加载JS文件:
function IncludeJS(jsFile, scriptDoneLoading) {
app.scriptLoader.add('js/'+ jsFile, scriptDoneLoading);
}
我需要知道当所有的js文件已被解决或拒绝,但目前还不清楚我怎么能知道这一点。
是否有一些回调被发送当所有的承诺已经被处理?
假设您正在使用新的ES6 Promise类,您可以使用Promise.all()
Promise.all(app.scriptLoader.promises).then(onSuccess, onError);
onSuccess
在所有承诺都解决时调用, onError
在任何承诺被拒绝时调用,第一个参数是发生的第一个拒绝。
承诺。都可以让你检查多个承诺。
我将修改add,使它返回一个promise。然后,而不是传递一个'doneFunc'来执行当它完成时,只是挂一些东西到。then()。
add = function(url) {
var promise = new Promise(function(resolve, reject) {
var script = document.createElement('script');
script.src = url;
script.addEventListener('load', function() {
resolve(script);
}, false);
script.addEventListener('error', function() {
reject(script);
}, false);
document.head.appendChild(script);
});
return promise
};
// here is how to call
add('myscript.js').then(function(scriptNode){
console.log("completed");
})
.catch(function(er){
console.log("failed", er);
});
//and here is how to load multiple
var array_of_promises = ['myscript.js', 'otherscript.js'].map(add)
Promise.all(array_of_promises).then(function(){
console.log("they are all loaded");
})
相关文章:
- 我的职位回报太快了,如何做出承诺
- 打破承诺链的好方法是什么
- 从函数返回角度承诺
- 我怎样才能获得承诺的价值
- 如何删除除冒号、数字和'上午'或者'下午'
- 延期承诺值未更新/解析/延期
- 在承诺链中处理早期回报的最佳方式
- 如何“;过滤器”;或者以其他方式重构该数据
- 承诺在非节点式回调上使用Bluebird
- 简单的ES6承诺问题-交换解决和拒绝参数
- 组合承诺和非承诺值
- 带有对象/原型的链式承诺(Q延期)
- AngularJS$q承诺使用socket.io
- React JS:未捕获(在承诺中)语法错误:在位置 0 的 JSON 中意外<令牌
- 当一些承诺失败时,如何继续使用$q.all()
- 哪个布尔运算更快<或者<=
- Nodejs和express路由,如何处理客户端的承诺
- 如何知道什么时候所有的承诺都被拒绝了,或者用基本的js承诺解决了
- 反复调用一个函数,直到它的承诺被解决,或者直到设置的超时时间过去
- Angular的承诺(关于一个承诺?)或者如何在$http之后链接一个.then.成功的角度