javascript – 如何使这个异步foreach循环工作与承诺?

我已经搞砸了承诺,但我对他们来说是新的,我根本无法弄清楚如何正确地做到这一点.目前,承诺没有任何意义,因为它不会等到异步$.get完成.

基本上,每个foreach迭代都有自己的$.get函数,我需要将它们全部完成,然后继续到具有“…获取专辑”console.log的部分.

$.get(id,function(data) {
    //(there's some code here)
    var getZippyUrls = new Promise(function(resolve) {
            zippyarray.forEach(function(zippy) {
            //(more code)
            $.get(zippy.full, function(data) {
                //^This is the foreach of $.gets
               //(code's here)
            });  
           resolve(zippyarray);
        });
    });

    //This is my failed Promise ->
    getZippyUrls.then(function(response) {
        console.log("WE'RE OUT " + response.length);
        response.foreach(function(d) {
            console.log("Promise"+d.media);
        });
        console.log('eyyyyyy');
    });

    console.log("...gets albumart");
    //Now after the previous stuff is done, move on
最佳答案
在同步代码中,当行结束时执行连续;

有承诺,继续通过.你正在使用promise构造函数并立即解决它,你根本没有等待任何任务.我将我的工作映射到任务中,然后将它们链接到一起,或者等待它们连续.

//I'm assuming
zippyarray; // array of Zippy objects

var tasks = zippyarray.map(function(zippy,i){
    return function(){ // return a task on that zippy;
       // basic logic here
       return $.get({
            // ajax request
       }).then(function(data){
            // process data like in your code
            // possibly store later for later use too
            return process(data); // return the processed data;
       });
    }
});

现在我们可以依次执行它们:

 var p = tasks[0](); // start the first one
 for(var i = 1; i < tasks.length; i++) p = p.then(tasks[i]);
 p.then(function(result){
       // all available here
 });

或者更好,连续:

$.when.apply(tasks.forEach(function(t){ return t(); })).then(function(results){
     // all done
})

转载注明原文:javascript – 如何使这个异步foreach循环工作与承诺? - 代码日志