Saya punya kode javascript seperti ini:
function justTesting() {
promise.then(function(output) {
return output + 1;
});
}
var test = justTesting();
Saya selalu mendapatkan nilai yang tidak ditentukan untuk tes var. Saya pikir itu karena janji belum terselesaikan..ada cara untuk mengembalikan nilai dari sebuah janji?
javascript
promise
Priscy
sumber
sumber
then()
panggilan sekali lagi adalah janji, yang membungkus nilai yang Anda kembalikan.promise
. Anda tidak menunjukkannya di mana pun dan Anda tidak mengembalikan apa pun darijustTesting()
fungsi Anda . Jika Anda menginginkan bantuan yang lebih baik, Anda perlu menjelaskan masalah apa yang Anda coba selesaikan daripada hanya menunjukkan kepada kami kode yang sangat "tidak aktif" sehingga tidak menggambarkan apa yang sebenarnya Anda coba lakukan. Jelaskan masalah yang Anda coba selesaikan.Jawaban:
Ketika Anda mengembalikan sesuatu dari
then()
panggilan balik, itu sedikit ajaib. Jika Anda mengembalikan nilai, nilai berikutnyathen()
dipanggil dengan nilai itu. Namun, jika Anda mengembalikan sesuatu seperti promise, yang berikutnya akanthen()
menunggu, dan hanya dipanggil saat promise itu selesai (berhasil / gagal).Sumber: https://developers.google.com/web/fundamentals/getting-started/primers/promises#queuing-asynchronous-actions
sumber
Untuk menggunakan janji, Anda harus memanggil fungsi yang membuat janji atau Anda harus membuatnya sendiri. Anda tidak benar-benar menjelaskan masalah apa yang sebenarnya Anda coba selesaikan, tetapi inilah cara Anda membuat janji sendiri:
Atau, jika Anda sudah memiliki fungsi yang mengembalikan sebuah janji, Anda bisa menggunakan fungsi itu dan mengembalikan janji:
sumber
return
, yaitujustTesting
katareturn.then => return
. Saya tahu ini berfungsi karena saya telah menerapkan ini (bcs linting memaksa saya untuk, menjauh darinew Promise
), tetapi dapatkah Anda menjelaskan cara memahami / memikirkan pasangan pengembalian / pengembalian itu?.then()
adalah fungsi terpisah dari fungsi yang memuatnya sehingga ketika dipanggil, ia memiliki nilai kembaliannya sendiri. Kedua, nilai pengembalian dari.then()
penangan menjadi nilai janji yang terselesaikan. Jadi,.then(val => {return 2*val;})
mengubah nilai yang diselesaikan darival
menjadi2*val
.Apa yang telah saya lakukan di sini adalah bahwa saya telah mengembalikan sebuah janji dari fungsi justTesting. Anda kemudian bisa mendapatkan hasilnya saat fungsi diselesaikan.
Semoga ini membantu!
sumber
Saya lebih suka menggunakan perintah "await" dan fungsi async untuk menghilangkan kerancuan janji,
Dalam hal ini saya akan menulis fungsi asynchronous pertama, ini akan digunakan sebagai pengganti fungsi anonim yang disebut di bawah bagian "promise.then" dari pertanyaan ini:
dan kemudian saya akan memanggil fungsi ini dari fungsi utama:
Memperhatikan bahwa saya mengembalikan fungsi utama dan sub fungsi ke fungsi asinkron di sini.
sumber