虽然用上了 async await,但感觉还是不是特别明白,譬如下面这个例子
是直接 return await 出来但值呢?
async function func() { const data = await getDataAsyncFromSomeApi() return data }
还是返回 Promise 呢?
async function func() { const data = await getDataAsyncFromSomeApi() return Promise.resolve(data) }
又或者
async function func() { const data = await getDataAsyncFromSomeApi() return new Promise((resolve, reject) => { resolve(data) }) }
![]() | 1 viko16 2017-07-25 23:02:15 +08:00 via Android 第一种 |
![]() | 2 xieranmaya 2017-07-25 23:06:00 +08:00 ![]() 写成第一种不如直接写成: ```js async function func() { return await getDataAsyncFromSomeApi() } func().then() ``` 而写成上面的不如直接 ```js getDataAsyncFromSomeApi().then() ``` 都是一样的。。。 |
![]() | 3 xieranmaya 2017-07-25 23:07:37 +08:00 另外我写的第一种里的 await 也可以直接去掉 |
![]() | 4 xieranmaya 2017-07-26 08:58:58 +08:00 ![]() 你首先得把规则弄清楚啊 async function 返回的就是一个 promise await 后面跟的必须是一个 promise 剩下的,只要你会 promise,你应该就会了 |
5 portals 2017-07-26 14:20:51 +08:00 ```Javascript async function func() { try { } } ``` |
6 portals 2017-07-26 14:22:42 +08:00 async function func() { try { const respOnse= await getDataAsyncFromSomeApi() return response } catch (error) { return error } } 这样就分别对应了 Promise.resolve 和 Promise.reject |
![]() | 7 AV1 2017-07-26 15:17:37 +08:00 ![]() ``` Promise.resolve(Promise.resolve(Promise.resolve(Promise.resolve('test')))) .then(i=>{ console.log(i==='test');//true }) ``` 明白了么? Promise 无论分装几次,永远都只有一层。也就是无论你用 Promise 包裹了几次,也只需一次 then 就能取出数据。 所以,在 async 函数里,无论你返回 Promise 还是普通的对象,你在外面调用时,await 得到的都是普通的对象。 我的意见: ``` async function func() { return getDataAsyncFromSomeApi() } ``` |