为什么在NodeJS中没有删除特定的数组?

问题描述

NodeJ:阵列删除无效。如果没有循环,则将其删除

module.exports.run = (client,msg,args) => {
//...
//...
song_search.res.videos.forEach(async (song,i) => {
    const songInfoER = await ytdl.getInfo(song.url).catch(err => {
        const remove = song_search.res.videos.splice(i,1); //doesn't work here!
    });
});
//...
//..
}

解决方法

您如何尝试这样做存在很多问题。最大的一个是.forEach()不了解承诺,也不知道异步,因此.forEach()循环运行到完成,然后过了一段时间,以无法预测的顺序,您的承诺就解决了,您尝试执行{{ 1}}操作。由于这些操作是按随机顺序进行的,因此不会有可预测的结果。此外,.splice()循环完成后,song_search.res.videos不会被更改。

有很多方法可以做到这一点。我建议一个常规的.forEach()循环,该循环具有Promise和Async感知。由于要在迭代时从数组中删除项目,因此向后迭代数组也更容易,因此删除项目不会更改其余的迭代:

for