提问人: 提问时间:6/13/2023 更新时间:6/13/2023 访问量:63
Javascript、jQuery:如何在更多的 LOOPS 中编写嵌套的 Promise?
Javascript, jQuery: How to write nested Promises in LOOPS in more LOOPS?
问:
在这种情况下,可以使用哪种 JavaScript 或 jQuery 构造的回调和/或承诺?它能做到吗?
我尝试了这个最小的例子(/vocab 和 /vocab2 是 REST 服务):
"use strict";
window.onload = function(e)
{
console.log("HELLO WORLD");
var promises = [];
promises.push(doxxx());
Promise.all(promises).then(
dozzz();
);
}
function doxxx()
{
console.log('doxxx CALLED');
$.ajax({
url: '/vocab',
type: 'POST',
dataType: 'json',
success: function(result)
{
console.log(result.data);
var promises = [];
$.each(result.data, function( index, value )
{
promises.push(doyyy(value[3]));
});
return Promise.all(promises);
}
});
}
function doyyy(german)
{
console.log('doyyy CALLED');
$.ajax({
url: '/vocab2',
type: 'POST',
data: {german : german},
dataType: 'json',
success: function(result)
{
return new Promise(function(myResolve, myReject)
{
console.log(result.data);
})
}
});
}
function dozzz()
{
console.log("END");
}
我希望在调用 dozzz() 并将“END”打印到控制台之前,所有嵌套的承诺都会被填满。
但它没有用。它在“doxxx CALLED”和“doyyy CALLED”之前打印了“END”。
更新
我尝试了亚历山大·内纳舍夫(Alexander Nenashev)的答案。 成功了。 谢谢。
答:
0赞
Alexander Nenashev
6/13/2023
#1
使用它将使代码更易于管理、可读和维护。async/await
"use strict";
window.onload = async function(e)
{
console.log("HELLO WORLD");
await doxxx();
dozzz();
}
async function doxxx()
{
console.log('doxxx CALLED');
const result = await $.ajax({
url: '/vocab',
type: 'POST',
dataType: 'json',
});
console.log(result.data);
return Promise.all($.map(result.data, (_, value) => doyyy(value[3])));
}
async function doyyy(german)
{
console.log('doyyy CALLED');
const result = await $.ajax({
url: '/vocab2',
type: 'POST',
data: {german : german},
dataType: 'json',
});
console.log(result.data);
}
function dozzz()
{
console.log("END, but not the END");
}
下一个:函数完成后的jQuery回调
评论
forEach
$.each
async
await
Promise.all