Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/rest/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 进入';然后';'的功能$q、 全部';在'之前;然后';单一承诺_Javascript_Angularjs_Angular Promise - Fatal编程技术网

Javascript 进入';然后';'的功能$q、 全部';在'之前;然后';单一承诺

Javascript 进入';然后';'的功能$q、 全部';在'之前;然后';单一承诺,javascript,angularjs,angular-promise,Javascript,Angularjs,Angular Promise,我有以下代码: function first() { let promises = two(arg); $q.all(promises).then(() => { console.log("all promises"); }); } function two(arg) { let promises = []; arg.forEach((ar) => { let promise = funcThatReturnP

我有以下代码:

function first() {
    let promises = two(arg);
    $q.all(promises).then(() => {
        console.log("all promises");
    });
}

function two(arg) {
    let promises = [];
    arg.forEach((ar) => {
        let promise = funcThatReturnPromise(ar).then(() => {
            console.log("single promise");
        });
        promises.push(promise);
    });
    return promises;
}
我希望所有的
“单一承诺”
将在
“所有承诺”
之前打印,但实际上
“所有承诺”
将在一些
“单一承诺”
之前打印

我如何强制所有的
“单一承诺”
“所有承诺”
之前打印

我试图找到解决办法,但找不到原因


提前谢谢,对不起我的英语

我刚刚测试了您的代码,似乎无法复制您的问题。每个
“单一承诺”
都将在最终的
“所有承诺”
之前打印出来,这应该是预期的行为。 如果其中一个承诺被拒绝,$q.all的
分支将不会运行。
我的测试代码是:

const fakePromise = () => {
    var deferred = this.$q.defer();
    this.$timeout(() => {
        deferred.resolve();
    }, Math.random() * 100);
    return deferred.promise;
}

const two = (arg) => {
    let promises = [];
    arg.forEach((ar) => {
        let promise = fakePromise().then(() => {
            console.log("single promise");
        });
        promises.push(promise);
    });
    return promises;
}
const first = () => {
    let promises = two(Array(2000).fill('x'));
    this.$q.all(promises).then(() => {
        console.log("all promises");
    });
};

first();
也许如果你有其他的例子,我可以帮你更多