Node.js
約束するコールバック
サーチ…
コールバックを約束する
コールバックベース:
db.notification.email.find({subject: 'promisify callback'}, (error, result) => {
if (error) {
console.log(error);
}
// normal code here
});
これはbluebirdのpromisifyAllメソッドを使用して、従来のコールバックベースのコードが何かを約束します。 bluebirdはオブジェクト内のすべてのメソッドを約束しますが、これらの約束に基づくメソッド名にはAsyncが追加されています:
let email = bluebird.promisifyAll(db.notification.email);
email.findAsync({subject: 'promisify callback'}).then(result => {
// normal code here
})
.catch(console.error);
特定の方法だけが約束される必要がある場合は、その約束を使用してください:
let find = bluebird.promisify(db.notification.email.find);
find({locationId: 168}).then(result => {
// normal code here
});
.catch(console.error);
メソッドの直接のオブジェクトが2番目のパラメータに渡されないと、約束することができないライブラリ(MassiveJSなど)があります。その場合、2番目のパラメータでpromisifiedする必要があるメソッドの直近のオブジェクトを渡し、コンテキストプロパティでそれを囲みます。
let find = bluebird.promisify(db.notification.email.find, { context: db.notification.email });
find({locationId: 168}).then(result => {
// normal code here
});
.catch(console.error);
手動でコールバックを約束する
手動でコールバック関数を約束する必要があることがあります。これは、コールバックが標準のエラーファースト形式に従わない場合、または保証するために追加のロジックが必要な場合です。
var fs = require('fs');
var existsAsync = function(path) {
return new Promise(function(resolve, reject) {
fs.exists(path, function(exists) {
// exists is a boolean
if (exists) {
// Resolve successfully
resolve();
} else {
// Reject with error
reject(new Error('path does not exist'));
}
});
});
// Use as a promise now
existsAsync('/path/to/some/file').then(function() {
console.log('file exists!');
}).catch(function(err) {
// file does not exist
console.error(err);
});
約束されたsetTimeout
function wait(ms) {
return new Promise(function (resolve, reject) {
setTimeout(resolve, ms)
})
}
Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow