我對 javascript 很熟悉,但我對 Promise、Async/Await 有點困惑
如何添加 async/await 來修改一個 Promise 資料并回傳原始 Promise
例如
這作業正常
function test() {
const data = {
sample: 1,
test: 2
}
const prom = Promise.resolve(data)
prom.then( data => {
data.sample = 5
})
return prom
}
test().then( data => {
console.log( data )
})
//output: {sample: 5, test: 2}
但是如果我執行 async/await 來修改承諾資料,則原始資料似乎在修改承諾之前輸出,例如
function test() {
const data = {
sample: 1,
test: 2
}
const prom = Promise.resolve(data)
prom.then( async data => {
data.sample = await 5
})
return prom
}
test().then( data => {
console.log( data )
})
//output: {sample: 1, test: 2}
uj5u.com熱心網友回復:
這作業正常
不是當承諾拒絕時,不。使用時then,你應該回傳新的promise以進行進一步的鏈接,并使用修改后的值來解決它;你不應該在 promise 中改變值。所以而不是
prom.then( data => {
data.sample = 5
})
return prom
寫得更好
return prom.then(data => {
data.sample = 5
return data
})
如果您將此模式延續到async版本中,它也可以正常作業 - 但實際上,在使用async/時await,沒有理由使用.then()! 寫得更好
const data = await prom;
data.sample = await something;
return data;
并將test函式本身標記為async.
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/506213.html
標籤:javascript 异步 es6-承诺
下一篇:Perl:為do()列印編譯警告
