gpt4 book ai didi

javascript - 如何使这个异步 foreach 循环与 promises 一起工作?

转载 作者:可可西里 更新时间:2023-11-01 01:37:52 25 4
gpt4 key购买 nike

我已经弄乱了其中的 Promises,但我是新手,我只是想不出如何正确地做到这一点。目前,Promise 没有意义,因为它不会等到异步 $.get 完成。

基本上,每个 foreach 迭代都有自己的 $.get 函数,我需要让它们全部完成,然后继续到具有“.. .gets albumart"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

最佳答案

在同步代码中,当行结束时执行延续;

对于 promises,继续是通过 .then 执行的。您正在使用一个 promise 构造函数并立即解决它,您根本没有等待任何任务。我会将我的工作映射到任务中,然后将它们与 then 链接起来,或者依次等待它们。

//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 循环与 promises 一起工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23069380/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com