js promise和async function解释

JavaScript/前端
435
0
0
2022-10-31

async和promise区别

没区别,都是一个东西(promise)。

因此两个的声明方式可以互相代替。

// async方式声明
var async_req = async () => 'async方式声明'

// Promise方式声明
var promise_req =  Promise.resolve('Promise方式声明')

await 和then区别

还是没有区别,都是属于 promise

甚至看到有些说:

asyncawait

promisethen

是配套的…

这不就是扯淡(从理论上来说 实际写代码可以这么说),都属于 promise

then方式

async_req().then(v => console.log(v))
promise_req.then(v => console.log(v))

此时是异步的。

await

js promise和async function解释

此时是同步的,

算成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)
) 

足以见得, awaitthen 要更多代码。

但是也拆分了两个函数,代码看起来更容易。

// 大部分都是用`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()