javascript - Hasil dari await untuk Promise mengembalikan sebuah promise?
Saya memiliki fungsi sederhana seperti ini yang saya harapkan true. Fungsi ini membuat Observable dari true, mengubahnya menjadi promise, dan await itu:
async function returnTrue() {
return await of(true).toPromise();
}
var b = returnTrue();
console.log("b is: ", b);
Ketika nilai dari b dicatat, itu mencatat:
b is:Promise {}IIUC cara lain untuk melakukan ini adalah dengan pipe observable seperti ini:
function returnFalse() {
return of(false).pipe(map(b=>{
return b;
}));
}
const c = returnFalse();
console.log('Return value c: ', c);
Dalam hal ini nilai yang dicatat adalah:
Return value c:
Observable {_isScalar: false, source: {…}, operator: {…}}
Pikiran?
Ringkasan
Merangkum jawaban dan pemikiran mengenai ini untuk melakukan pemrograman sinkron dengan RxJS Observables:
https://medium.com/p/6276721e674a
Jawaban #1
Nilai apa pun yang dikembalikan dari konteks fungsi async dibungkus dalam sebuah Promise.
Dalam kode Anda meskipun Anda mengembalikan hasil dari await yang sebenarnya menunggu Promise of(true).toPromise() untuk diselesaikan, yang memang terjadi tetapi nilai yang diselesaikan dibungkus lagi dalam sebuah promise karena konteks fungsi async.
Ini dinyatakan dalam dokumentasi fungsi async di MDN:
Deklarasi fungsi async mendefinisikan fungsi asinkron, yang mengembalikan objek AsyncFunction. Fungsi asinkron adalah fungsi yang beroperasi secara asinkron melalui event loop, menggunakan Promise implisit untuk mengembalikan hasilnya
Dalam kode kedua yang menggunakan Observable, Anda menggunakan operator pipe yang menurut definisi mengembalikan Observable lain setelah menerapkan operasi yang diberikan (map dalam kasus Anda) dari dokumentasi:
pipe(operations: ...*): Observable
Return: Observable hasil Observable dari semua operator yang telah dipanggil sesuai dengan urutan mereka diteruskan.
Jawaban #2
Coba ini:
var b = await returnTrue()
PS. lupakan tentang var - baca tentang const & let
