SyntaxError:意外的保留字“await”,node.js是正确的版本

我试图异步运行一个函数 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

我的节点版本是 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);
    }
  }
}


以上是SyntaxError:意外的保留字“await”,node.js是正确的版本的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>