Saya masih berjuang dengan janji-janji, tetapi membuat beberapa kemajuan berkat komunitas di sini.
Saya memiliki fungsi JS sederhana yang menanyakan database Parse. Seharusnya mengembalikan array hasil, tetapi jelas karena sifat asinkron dari kueri (karenanya janji), fungsi mengembalikan sebelum hasil, meninggalkan saya dengan array yang tidak ditentukan.
Apa yang harus saya lakukan untuk membuat fungsi ini menunggu hasil dari janji?
Ini kode saya:
function resultsByName(name)
{
var Card = Parse.Object.extend("Card");
var query = new Parse.Query(Card);
query.equalTo("name", name.toString());
var resultsArray = [];
var promise = query.find({
success: function(results) {
// results is an array of Parse.Object.
console.log(results);
//resultsArray = results;
return results;
},
error: function(error) {
// error is an instance of Parse.Error.
console.log("Error");
}
});
}
javascript
parse-platform
promise
mac_55
sumber
sumber
Jawaban:
Alih-alih mengembalikan
resultsArray
Anda mengembalikan janji untuk array hasil dan kemudianthen
bahwa di situs panggilan - ini memiliki manfaat tambahan dari penelepon mengetahui fungsi melakukan I / O asinkron. Penyandian konkurensi dalam JavaScript didasarkan pada hal itu - Anda mungkin ingin membaca pertanyaan ini untuk mendapatkan ide yang lebih luas:Anda dapat melihat lebih banyak contoh menggunakan janji parse dengan kueri di posting blog Parse sendiri tentang hal itu .
sumber
Gunakan
async/await
(BUKAN Bagian dari ECMA6, tetapi tersedia untuk Chrome, Edge, Firefox dan Safari sejak akhir 2017, lihat canIuse )MDN
Ditambahkan karena komentar: Fungsi async selalu mengembalikan Janji, dan dalam TypeScript akan terlihat seperti:
sumber
Anda tidak ingin membuat fungsi menunggu, karena JavaScript dimaksudkan untuk tidak memblokir. Alih-alih mengembalikan janji di akhir fungsi, maka fungsi panggilan dapat menggunakan janji untuk mendapatkan respons server.
sumber
success:
bit tidak aktif.return query.find();
.Anda sebenarnya tidak menggunakan janji di sini. Parse memungkinkan Anda menggunakan callback atau janji; pilihanmu.
Untuk menggunakan janji, lakukan hal berikut:
Sekarang, untuk mengeksekusi hal-hal setelah janji selesai, Anda bisa menjalankannya di dalam janji panggilan balik di dalam
then()
panggilan. Sejauh ini akan sama persis dengan panggilan balik biasa.Untuk benar-benar memanfaatkan janji adalah ketika Anda memikatnya, seperti ini:
sumber
Parse.Object
's.