我正在尝试切换到使用基本 JS promise 在我的 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 文件何时已被解析或拒绝,但不清楚我如何知道这一点。
当所有 promise 都已处理后,是否会发送一些回调?
最佳答案
假设您正在使用新的 ES6 Promise 类,您可以使用 Promise.all()
Promise.all(app.scriptLoader.promises).then(onSuccess, onError);
onSuccess
被调用 iff 所有 promise 都解决了,如果任何 promise 被拒绝,则调用 onError
,第一个参数是发生的第一个拒绝.
关于javascript - 如何知道什么时候所有的 promise 都被拒绝或用基本的 js promise 解决,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32749400/