Bertentangan dengan kedua jawaban di komentar - ada perbedaan.
Sementara
Promise.resolve(x);
pada dasarnya sama dengan
new Promise(function(r){ r(x); });
ada kehalusan.
Fungsi pengembalian janji umumnya harus memiliki jaminan bahwa fungsi tersebut tidak boleh ditampilkan secara sinkron karena mungkin ditampilkan secara asinkron. Untuk mencegah hasil yang tidak diharapkan dan kondisi balapan - lemparan biasanya diubah menjadi penolakan yang dikembalikan.
Dengan mengingat hal ini - saat spesifikasi dibuat, konstruktor promise akan aman.
Bagaimana jika someObject
yang undefined
?
- Cara A mengembalikan janji yang ditolak.
- Cara B melempar secara serempak.
Bluebird melihat ini, dan Petka menambahkan Promise.method
untuk mengatasi masalah ini sehingga Anda dapat terus menggunakan nilai pengembalian. Jadi cara yang benar dan termudah untuk menulis ini di Bluebird sebenarnya tidak keduanya - yaitu:
var someFunction = Promise.method(function someFunction(someObject){
someObject.resolved = true;
return someObject;
});
Promise.method akan mengubah lemparan menjadi penolakan dan pengembalian menjadi penyelesaian untuk Anda. Ini adalah cara yang paling aman untuk melakukan ini dan itu mengasimilasi kemampuan then
melalui nilai-nilai kembali sehingga itu akan bekerja bahkan jika someObject
sebenarnya adalah janji itu sendiri.
Secara umum, Promise.resolve
digunakan untuk mentransmisikan objek dan janji asing (kemudian) menjadi janji. Itu kasus penggunaannya.
Promise.resolve
hanyalah gula.