node.js - SyntaxError : Unexpected reserved word "await", node.js 是正确的版本

标签 node.js arrays for-loop asynchronous async-await

我试图异步运行一个函数 20 次。
我有函数定义:

import axios from 'axios';

async function updateUser (url, user) {
        return new Promise((resolve, reject) => {
            axios.put(url, JSON.stringify(user))
                .then(response => {
                //Folio returned code 204
                console.log('The user has been updated');
                resolve(response.data);
                }).catch((err) => {
                //Folio returned error
                console.error(`Error Text: ${err.response.data}`);
                console.error(`Error Code: ${err}`);
                });
        });
    };

  export {updateUser};
然后我尝试在外部 JSON 中循环用户,并将它们一次更新到我的系统 20:
import {updateUser} from './updateUser.js';
import usersjson from './jsons/users.json';
let promises=[];
if (usersjson.users.length) {
    try {
        for (const user of usersjson.users) {
            update = new promise ((resolve,reject) => {
                updateUser(url, user)
                .then((list) => {resolve(list)})
                .catch((error)=>{reject(error)})
            });
            promises.push(update);
            if (promises.length = 20) {
                await Promise.all(promises)
                    .then((responses)=> {
                      console.log(responses);
                      promises=[];
                    }).catch((err)=> {
                      console.log(err);
                    });
            }
        }
    } catch(err)=> {
        console.log(err);
    }
}
但是,我在控制台中收到一条错误消息:
await Promise.all(promises)
^^^^^

SyntaxError: Unexpected reserved word
我的 Node 版本是 12.19.0(根据之前的问题,它似乎必须至少是 10,所以这不应该是问题)。
当我在没有等待的情况下运行该函数时,它们可以正常工作(即用户在我的系统上更新)。
似乎for循环本身也是异步的,但我担心如果同时调用太多,我的系统会阻塞API,所以我想一次进行20-50次调用,顶。

最佳答案

为了使用 await,您需要声明将 await 放入的函数为 async
例如:

const functionReturningPromise = (input) => {
  return new Promise((resolve, reject) => {
    if (!input) {
      return reject();
    }
    
    return resolve();
  });
}

const functionAwaitingPromise = async () => {
  for (let i = 0; i < 20; i +=1) {
    try {
      await functionReturningPromise(i);
      
      console.log(i);
    } catch (error) {
      console.log(error);
    }
  }
}

关于node.js - SyntaxError : Unexpected reserved word "await", node.js 是正确的版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66158135/

相关文章:

javascript - 调试循环和函数 - javascript

ios - 在 IOS 中构建一个使用 node.js 服务器的聊天应用程序

javascript - Node.js:导出语法错误

javascript - git shasum 和 Node sha1 不产生相同的哈希值

php - 如何将数组键提取到数组 PHP 中的字符串

ios 如何在for循环中提取数组的所有rangeOfString?

node.js - 将 Application Insights 与本地 Node.js 应用程序结合使用

c++ - 如果条目大于 90,则打印出字符串的 boolean 函数

javascript - 将元音大写

python - 是使用嵌套循环进行更大的重复还是将整个范围放入一个循环中更好?哪个更快/更简单?