Rumah > Soal Jawab > teks badan
P粉6161110382023-08-22 12:43:32
Apabila janji diselesaikan/ditolak, ia memanggil pengendali kejayaan/ralatnya:
var promiseB = promiseA.then(function(result) { // 用result做一些事情 });Kaedah
then
juga mengembalikan janji: promiseB yang akan diselesaikan/ditolak berdasarkan nilai pulangan pengendali kejayaan/ralat promiseA.
Pengendali kejayaan/ralat promiseA boleh mengembalikan tiga kemungkinan nilai yang akan menjejaskan hasil promiseB:
Dengan pemahaman ini, anda boleh memahami perkara berikut:
promiseB = promiseA.then(function(result) { return result + 1; });
Kemudian panggilan mengembalikan promiseB dengan segera.
Apabila promiseA diselesaikan, ia menyerahkan hasilnya kepada pengendali kejayaan promiseA.
Memandangkan nilai pulangan ialah hasil promiseA + 1 dan pengendali kejayaan mengembalikan nilai (pilihan 2 di atas), promiseB akan diselesaikan serta-merta dan pengendali kejayaan promiseB akan diluluskan hasil promiseA + 1.
P粉1551282112023-08-22 00:10:42
Nilai yang dikembalikan dalam fungsi kejayaan
promiseA
的then
函数返回一个新的promise(promiseB
),在promiseA
解决后立即解决,其值是在promiseA
.
Dalam kes ini, promiseA
解决为一个值-result
,然后立即使用result + 1
的值解决promiseB
.
Akses keputusan promiseB
的值与访问promiseA
dengan cara yang sama.
promiseB.then(function(result) { // 这里你可以使用promiseB的结果 });
Bermula dengan ECMAScript 2016 (ES7, 2016), async
/await
menjadi standard dalam JavaScript, yang membenarkan sintaks alternatif kepada pendekatan di atas. Kini anda boleh menulis seperti ini:
let result = await functionThatReturnsPromiseA(); result = result + 1;
Tiada promiseB sekarang kerana kami merungkai hasil promiseA menggunakan await
dan anda boleh menggunakannya terus.
Walau bagaimanapun, await
只能在async
hanya boleh digunakan dalam fungsi async
. Jadi zum masuk sedikit, kod di atas perlu terkandung dalam fungsi:
async function doSomething() { let result = await functionThatReturnsPromiseA(); return result + 1; }
Untuk menjadi jelas, dalam contoh ini doSomething
函数的返回值仍然是一个promise,因为async函数返回的是promise。所以如果你想要访问返回值,你需要使用result = await doSomething()
, ini hanya boleh digunakan dalam fungsi async yang lain. Pada asasnya, dalam konteks async induk, anda mempunyai akses terus kepada nilai yang dihasilkan oleh konteks async anak.