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()