async和promise区别
没区别,都是一个东西(promise
)。
因此两个的声明方式可以互相代替。 | |
// async方式声明 | |
var async_req = async () => 'async方式声明' | |
// Promise方式声明 | |
var promise_req = Promise.resolve('Promise方式声明') |
await 和then区别
还是没有区别,都是属于 promise
。
甚至看到有些说:
async
和 await
promise
和 then
是配套的…
这不就是扯淡(从理论上来说 实际写代码可以这么说),都属于 promise
。
then方式
async_req().then(v => console.log(v)) | |
promise_req.then(v => console.log(v)) |
此时是异步的。
await
此时是同步的,
算成then
方式的话,大概像这样:
async_req().then(v => { | |
console.log(v) | |
return promise_req | |
}).then(v => { // 因为返回的是promise_req 所以v现在是promise_req | |
console.log(v) | |
}) |
让await不堵塞
解决方案: 返回 promise
就完事了,因为promise
运行时是异步。
async_reqs_handle = Promise.resolve( | |
console.log(await async_req()) | |
) | |
async_reqs_handle = Promise.resolve( | |
console.log(await promise_req) | |
) |
足以见得, await
比 then
要更多代码。
但是也拆分了两个函数,代码看起来更容易。
// 大部分都是用`async` 来代替`Promise`声明的。 上面的Promise声明只是为了解释,他们是同一个东西。 | |
async_reqs_handle = async () => console.log(await async_req()) | |
promise_req_handle = async () => console.log(await promise_req) | |
async_reqs_handle() | |
promise_req_handle() |