【问题标题】:Convert promise function to async/await将 promise 函数转换为 async/await
【发布时间】:2019-03-27 15:22:27
【问题描述】:

我正在尝试将此函数转换为异步/等待。却一头雾水。有办法吗?

const csv = require('fast-csv');
const inputFileFolder = 'upload';

    const readData = (inputFileName) => {
      const csvData = [];

      return new Promise((resolve, reject) => {
        csv
          .fromPath(`${inputFileFolder}/${inputFileName}`)
          .on('data', (data) => {
            csvData.push(data);
          })
          .on('end', () => {
            resolve(csvData);
          })
          .on('error', () => {
            reject(new Error('Something went wrong while reading the CSV file.'));
          });
      });
    };

【问题讨论】:

  • 有什么问题?
  • 你不能使用async/await - 你需要在处理promise的函数中使用它。
  • 我猜你可以用await new Promise 代替return new Promise 但这并不能真正完成任何有用的事情——每个@Jack,如果你想使用await,请使用await in readData消费者
  • @JackBashford 我做到了。但想知道我是否可以使这个异步/等待。
  • 为什么? “让它异步/等待”你仍然需要“承诺”csv.fromPath - 异步等待不用于将回调样式代码转换为 Promise 样式代码 - 正如已经说过两次的那样,用于承诺

标签: javascript node.js promise async-await


【解决方案1】:

async..awaitthencatch promise 方法提供语法糖,以类似同步的方式链接 promise。

由于 promise 已创建但未链接,因此使用 async..await 不会改进代码。当没有承诺链接时,仍然需要 new Promiseasync..await

【讨论】:

    【解决方案2】:

    只有在 async 函数中声明 await 才能使用它。 您可以使用它,然后使用正确的错误处理。 但是如果你想使用 await 你可以使用

    async function name() {
      await // Your code here
    };
    

    【讨论】:

    • 我知道怎么写异步函数。我的问题是转换这个特定的。
    • return new Promise(async function(resolve, reject) {};
    猜你喜欢
    • 2019-08-11
    • 1970-01-01
    • 2023-04-08
    • 2021-10-19
    • 1970-01-01
    • 2019-12-14
    • 2023-03-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多