Bagaimana untuk mendapatkan nilai janji?
P粉116631591
2023-08-21 13:47:33
<p>Saya sedang melihat dokumentasi Angular untuk contoh <code>$q</code>, tetapi saya fikir ini mungkin berfungsi untuk janji secara umum. Contoh di bawah disalin terus daripada dokumentasi mereka, termasuk ulasan mereka: </p>
<pre class="brush:php;toolbar:false;">promiseB = promiseA.then(function(result) {
pulangan hasil + 1;
});
// Apabila promiseA diselesaikan, promiseB akan diselesaikan serta-merta, dan nilainya akan menjadi hasil promiseA tambah 1</pre>
<p>Saya tidak pasti cara ini berfungsi. Jika saya boleh memanggil <code>.then()</code> pada hasil <code>.then()</code> yang pertama, merantainya bersama-sama, saya tahu saya boleh melakukannya , kemudian < ;code>promiseB</code> ialah objek janji jenis <kod>Objek</code>. Ia bukan <kod>Nombor</kod>. Jadi apakah yang mereka maksudkan dengan "nilainya akan menjadi hasil promiseA tambah 1"? </p>
<p>Adakah saya patut mengaksesnya seperti <kod>promiseB.value</code>? Bagaimanakah panggilan balik kejayaan boleh mengembalikan janji dan mengembalikan "hasil + 1"? Saya kehilangan sesuatu. </p>
Apabila janji diselesaikan/ditolak, ia memanggil pengendali kejayaan/ralatnya:
Kaedahthen
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:
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.
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.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:Tiada promiseB sekarang kerana kami merungkai hasil promiseA menggunakan
await
dan anda boleh menggunakannya terus.Walau bagaimanapun,
await
只能在async
hanya boleh digunakan dalam fungsiasync
. Jadi zum masuk sedikit, kod di atas perlu terkandung dalam fungsi: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.