【问题标题】:SyntaxError: Unexpected reserved word "await", node.js is correct versionSyntaxError:意外的保留字“await”,node.js 是正确的版本
【发布时间】:2021-05-15 09:28:16
【问题描述】:

我正在尝试异步运行一个函数 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个,顶。

【问题讨论】:

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


【解决方案1】:

为了使用 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);
    }
  }
}

【讨论】:

  • 什么意思?在这种情况下我该怎么做?
  • 我刚刚添加了一个抽象示例。如果您直接运行 index.js,您还可以声明一个 init 函数。例如。 const init = async () => {};然后调用 init()
猜你喜欢
  • 2015-01-26
  • 2017-04-07
  • 2022-06-10
  • 1970-01-01
  • 1970-01-01
  • 2013-04-18
  • 1970-01-01
  • 2015-11-27
  • 2021-12-08
相关资源
最近更新 更多