问答

一个 promise的函数 已经使用await 在等待结果了 为什么还是会直

作者:admin 2021-06-07 我要评论

问题描述 一个 promise的函数 已经使用await 在等待结果了 为什么还是会直接return 返回pending状态 问题出现的环境背景及自己尝试过哪些方法 为什么在c的函数体...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)

问题描述

一个 promise的函数 已经使用await 在等待结果了 为什么还是会直接return 返回pending状态

问题出现的环境背景及自己尝试过哪些方法

为什么在c的函数体中一定要加await才能在3秒后输出内容,加上await不应该同步等待aa执行完成之后才return么?

如果c不加async.await,则会打印出pending状态的promise

相关代码



function aa() {

return new Promise((resolve, reject) => {

setTimeout(() => {

resolve('wwee')

}, 3000)

})

}

const b = async() => {

let w = await aa()

console.log(w) //这时候是3秒打印内容

return w

}

const c = async() => {

console.log(await b())

}

c()

你期待的结果是什么?实际看到的错误信息又是什么?

自己想的应该是等待3秒之后才会return出结果,但是直接返回了一个promise的pending状态,感觉很奇怪,有什么办法可以解决么?

###

async修饰的函数,返回值会自动转为promise。它是同步执行的,如果内部有await,会在await全部执行完后,返回的promise状态才会改变。

对你有帮助的话,请点个采纳给个赞,谢谢。

###

const b = await async() => {...}

不能 await 就在外面再包一层 async

###

async 使返回类型就是为 Promise

按照你的代码只能

c().then(r => {
    // r
});

// 或者直接使用 then 调用 b()

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • PHP-fpm怎么实现进程间同步与互斥的?

    PHP-fpm怎么实现进程间同步与互斥的?

  • ts类型问题

    ts类型问题

  • js不带引号的对象格式字符串怎么转为对

    js不带引号的对象格式字符串怎么转为对

  • Number.prototype.toFixed() 四舍五入

    Number.prototype.toFixed() 四舍五入

腾讯云代理商
海外云服务器