Javascript 如何仅在异步命令完成后才在阵列中循环?
我需要把35件东西存到猫鼬身上。在上一个完成之前,我不想保存下一个 我尝试了下面的代码,但没有成功Javascript 如何仅在异步命令完成后才在阵列中循环?,javascript,mongoose,Javascript,Mongoose,我需要把35件东西存到猫鼬身上。在上一个完成之前,我不想保存下一个 我尝试了下面的代码,但没有成功 function loopData(array){ let i = array.length - 1; while( i >= 0){ delete array[i]['date']; delete array[i]['saved']; let article = array[i]; DBM.saveArticle(article).then(() =
function loopData(array){
let i = array.length - 1;
while( i >= 0){
delete array[i]['date'];
delete array[i]['saved'];
let article = array[i];
DBM.saveArticle(article).then(() => {
i--;
console.log('article saved', i)
});
}
}
我尝试了这一点,但它不起作用,因为myLoop不被认为是异步的:
function loopData(array){
for( let i = array.length - 1 ; i-- ; i >= 0){
delete array[i]['date'];
delete array[i]['saved'];
let article = array[i];
await myLoop(i, article);
}
}
async function myLoop(i, article) {
let response = await DBM.saveArticle(article);
console.log('article saved', i);
}
您可以通过递归实现相同的效果
function loopData(array){
DBM.saveArticle(array[0]).then(() => {
if(array.length > 1) {
loopData(array.slice(1));
}
})
}
这个版本的方法接受一个数组,保存第一个元素,然后用剩余的元素(如果有的话)调用自己。我喜欢它,但是你能用wait和async来做吗?@j.a.为什么?