Node.js 等待问题的nodejs异步

Node.js 等待问题的nodejs异步,node.js,promise,async-await,Node.js,Promise,Async Await,尝试循环通过for循环并执行某些操作,但等待该for循环的每次迭代完成,for循环将不知道实际应用程序中有多少项 试验 输出: 开始 错误的 完成 0 1. 2. 3. 4. 我需要0到4来阻止进程,然后记录完成。在第一个示例中,不需要将getList标记为async,也不需要在顶级使用Wait。问题的关键在于setTimeout是一个非阻塞操作,因此您的承诺是在数组有机会填充之前解决 在第二个示例中,您使用的是wait,但在非waitible item上,number只是一个数组,因此上面的问

尝试循环通过for循环并执行某些操作,但等待该for循环的每次迭代完成,for循环将不知道实际应用程序中有多少项

试验

输出:

开始 错误的 完成 0 1. 2. 3. 4.
我需要0到4来阻止进程,然后记录完成。

在第一个示例中,不需要将getList标记为async,也不需要在顶级使用Wait。问题的关键在于setTimeout是一个非阻塞操作,因此您的承诺是在数组有机会填充之前解决

在第二个示例中,您使用的是wait,但在非waitible item上,number只是一个数组,因此上面的问题同样适用于Promise,它将在数组填充之前解决

如果在现实世界的应用程序中,您有一个需要等待固定时间的示例,并且这需要按顺序进行,那么您可以创建一个可等待的setTimeout,例如


我已经在问题中添加了测试3,仍然没有乐趣。@Darcey你能展示完整的示例吗,其中包括我上面给出的不起作用的代码?你最近的编辑仍然是错误的。。。
async function getList(){

    return new Promise( (resolve, reject) => {
        let out = [];

        for (let n=0; n <= 4; n++){
            // new Promise( (resolve, reject) => {});
            let time = (n+1) * 250;
            new Promise(resolve => setTimeout(()=>{
                log(n);
                out.push(n);
                resolve();
            }, time));
        }

        // How do I get this resolve to run only once all the for looped promises are complete?
        resolve(out);
    });
}

function test(){
    let numbers = false;
    log("start");
    log(numbers); // logs false (correct);

    getList().then((v)=>{
        log("v = " + v); // this should be an array of ints 0 to 4
        log("completed");
    })
}

console.clear();
test();
const sleep = timeout => new Promise(resolve => setTimeout(resolve, timeout));

async function getList() {
  const numbers = [1,2,3,4,5,6,7,8,9,10];
  const out = [];
  for (const n in numbers) {
    await sleep(50);
    out.push(n);
  }
  return out;
}