当前位置: 首页 > 知识库问答 >
问题:

当您在异步函数中返回promise时会发生什么?

锺离高丽
2023-03-14

据我所知,异步函数总是返回一个允诺,当函数返回时,该允诺会进行解析,或者在抛出错误时拒绝该允诺。

如果一个异步函数自己返回一个承诺,会发生什么?在调用下面的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());
    })
}

共有1个答案

鲁博赡
2023-03-14

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
 类似资料:
  • 问题内容: 就速度和内存效率而言,在函数内部导入Python模块和/或函数有什么优缺点? 它是否在每次运行该功能时重新导入,或者是否仅在运行一开始就重新导入一次? 问题答案: 每次运行该功能时都会重新导入吗? 没有; 确切地说,Python模块在每次导入时都会被缓存,因此导入第二(或第三或第四…)次实际上并不会迫使它们再次经历整个导入过程。1个 是否在开始时导入一次功能是否运行? 不可以,只有在执

  • 我试图了解异步/等待如何与promise一起工作。 据我所知,await应该是阻塞的,在上面的代码中,它似乎阻塞了返回带有原语

  • 问题内容: 我的代码: 当我尝试运行这样的东西时: 我越来越: 但为什么? 我的主要目标是将令牌(从令牌中返回承诺)转换为变量。然后才执行一些操作。 问题答案: 只要其结果尚未解决,promise将始终记录未决。无论promise状态如何(已解决或仍处于待处理状态),您都必须调用promise来捕获结果: 这是为什么? 承诺只是向前的方向;您只能解决一次。a的解析值传递给其或方法。 根据Promi

  • 根据锈迹参考, 如果存在函数(snip),其返回类型必须是以下类型之一: >

  • 我对反应性API比较陌生,很好奇当我们从web控制器返回流量时,幕后发生了什么。 根据spring-web文档 反应性返回值的处理如下: 与使用DeferreDreSult类似,适用于单值promise。例子包括单(反应器)或单(RxJava)。 因此,例外是两个API的行为应该与多值流(Flux)的行为应该与返回deferredresult的行为相似。 但是在返回延迟结果的API中,整个列表在浏

  • 我有这个异步函数,并试图返回一个对象或null。 但是我在定义类型时出错了。 如何定义这种数据类型? 类型“ContactId | null”不可分配给类型“string | null” 类型“ContactId”不能分配给类型“string”。

  • 我正在使用编写promise代码。然后现在,我决定使用wait/async编写它。我在promise中调用了一个函数add_,然后在中调用了另一个函数。然后是该函数的一部分。这是我使用的代码。然后 这是使用wait/async的代码。 使用await/async的代码显示了一个错误,即add\u lessons是意外标识符。那么,告诉我如何在promise中定义异步函数?

  • 更新 我已经读了十几篇关于这个话题的文章,但没有一篇涉及到这个基本问题。我将在本文末尾列出一个参考资料部分。 原始帖子 我对函数的理解是,它返回一个promise。 MDN文档:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function 在我的程序中,我可以编写如下内容: 我