虽然用上了 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 1
写成第一种不如直接写成:
```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 1
你首先得把规则弄清楚啊
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
DOLLOR 2017-07-26 15:17:37 +08:00 1
```
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() } ``` |