CNode

async/await 相关问题请指教

问答
Rrianran1993发布于8 年前最后回复8 年前7 回复4978 浏览0 收藏
export default class DimensionApi extends BaseService {
    query(params) {
        return super.query(url, params)
    }

    async query1(params) {

        var a = await Api.query(url, params)
        console.log('query', a)  // 这里是一个axios对象
        return a

    }
}
// 调用
a = new DimensionApi('url').query1()  // 这个a 是个promise

为什么a 还是一个处于pending状态的promise呀? 在类里面的console打出来就已经不是一个promise了呀,我是什么地方用错了?

查看回复

回复 (7)

L
luanxuechao#1·8 年前

首先 你的 super.query 返回的是一个promise 吗? 而且 你的promise resolve 还是 reject 了没有

R
rianran1993#3·8 年前

是在不行,只有在 调用的地方再 await 一下啦额

H
haoyong#4·8 年前

async函数返回Promise 对象,调用query1函数不加await,返回的就是Promise 对象啊。

L
linliny#5·8 年前

async/await本质还是异步的,所以你要确定同步和异步,理一下程序执行的顺序

还有,async函数返回的是一个promsie

R
rianran1993#6·8 年前
async function a(){return 1}

a()
Promise {<resolved>: 1}

哦, 原来async 函数的返回值是个promise呀.我明白了,谢谢各位

P
phpsmarter#7·8 年前

这个你要参考一下阮一峰的 es6教程, async/await是在本轮循环结束时执行的. 在本轮事件轮询里,注册 await, promise 状态为 pending, 然后执行 console.log, a就是 pending , 在本轮结束时, pending->resolve 时才能打印出结果.

不知道是不是这么理解的. 我也遇到这个问题,但是远程异步的结果是可以出来的,

参与回复
登录后即可参与回复。登录