javascript - 如何知道什么时候所有的 promise 都被拒绝或用基本的 js promise 解决

标签 javascript jquery promise

我正在尝试切换到使用基本 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/

相关文章:

jquery - 使用 $ ('.ajax_form' ).ajaxForm(); 的奇怪行为

javascript - jQuery 选择器 $ ('#foo a' ) 是如何计算的?

javascript - 将参数传递给angularjs中的promise回调

javascript - 如何为视差运动添加缓动?

javascript - 如何禁用/启用页面滚动

jquery - 为什么在循环中改变颜色后颜色没有改变

c++ - 这个语法是什么意思, `class template <class R, class ...Args> class name<R(Args...)>`

javascript - Nodejs 中的 Promise 使用 Q 将引用保存到 mongoose

javascript - Fullcalendar - 根据值更改事件颜色

javascript - jQuery 什么是 - el.moveDown()