Promise
Sınıfı kullanma
Promises'i kullanmak için iyi bir başlangıç noktası sunan MDN'nin Promise belgelerine bir göz atmanızı tavsiye ederim . Alternatif olarak, çevrimiçi olarak kullanılabilen birçok eğitim olduğundan eminim. :)
Not: Modern tarayıcılar, Promises'in ECMAScript 6 spesifikasyonunu zaten desteklemektedir (yukarıda bağlantı verilen MDN belgelerine bakın) ve yerel uygulamayı 3. taraf kitaplıkları olmadan kullanmak istediğinizi varsayıyorum.
Gerçek bir örneğe gelince ...
Temel prensip şu şekilde işler:
- API'niz çağrılır
- Yeni bir Promise nesnesi oluşturursunuz, bu nesne yapıcı parametresi olarak tek bir işlevi alır
- Sağladığınız işlev, temel uygulama tarafından çağrılır ve işleve iki işlev verilir -
resolve
vereject
- Mantığınızı yaptıktan sonra, bunlardan birini Sözü yerine getirmek veya bir hata ile reddetmek için çağırırsınız.
Bu çok gibi görünebilir, bu yüzden burada gerçek bir örnek var.
exports.getUsers = function getUsers () {
return new Promise((resolve, reject) => {
connection.query('SELECT * FROM Users', (err, result) => {
if (err) {
return reject(err)
}
return resolve(result)
})
})
}
exports.getUsers()
.then(users => {
})
.catch(err => {
})
Eşzamansız / bekleme dili özelliğini kullanma (Node.js> = 7.6)
Node.js 7.6'da, v8 JavaScript derleyicisi async / await desteği ile yükseltilmiştir . Artık işlevleri var olarak bildirebilirsiniz async
; Promise
bu, zaman uyumsuz işlev yürütmeyi tamamladığında otomatik olarak çözülen bir a döndürdüğü anlamına gelir . Bu işlevin içinde, await
başka bir Promise çözülene kadar beklemek için anahtar sözcüğü kullanabilirsiniz .
İşte bir örnek:
exports.getUsers = async function getUsers() {
const result = await connection.query('select * from users')
const result2 = await new Promise((resolve, reject) => {
connection.query('select * from users', (err, res) => {
return void err ? reject(err) : resolve(res)
})
})
return result
}