首页 > 解决方案 > 当你在异步函数中返回一个 Promise 时会发生什么?

问题描述

据我了解,异步函数总是返回一个 Promise,它在函数返回时解析,或者在抛出错误时拒绝。

如果异步函数自己返回一个 Promise 会发生什么?在调用下面的 download() 函数时应该如何处理?

const download = async () => {
    const res = await axios({
        "...",
        method: 'GET',
        responseType: 'stream'
    });

    const writer = fs.createWriteStream(absoluteArchivePath);
    res.data.pipe(writer);

    return new Promise((resolve, reject) => {
        writer.on('finish', () => resolve());
        writer.on('error', () => reject());
    })
}

标签: javascript

解决方案


https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise

Promise 对象表示异步操作的最终完成(或失败)及其结果值。

const myAsyncFunction = error => {
  return new Promise((resolve, reject) => {
    if (error) {
      reject('an error occured');
    } else {
      resolve('OK');
    }
  });
};

myAsyncFunction(true)
  .then(r => {
    console.log('ok');
  })
  .catch(err => {
    console.log('error');
  });
// log: error

myAsyncFunction(false)
  .then(r => {
    console.log('ok');
  })
  .catch(err => {
    console.log('error');
  });
// log: ok

推荐阅读