まず、nodeFunction
の仕組みを理解する必要があります。最後の引数としてコールバック関数が使用されます。このコールバックには2つの引数があり、最初のものはerror
で、もう1つはデータです。たとえばrequire("fs").readFile
のために考えてみましょう:これは規則であることを
// This is the callback
function callback (error, data) {
if (error) {
console.error('There was an error', error)
} else {
console.log('This is the data', data)
}
}
require('fs').readFile('my-file.txt', callback)
注意、それを強制するJS自体には何もありません。
今すぐPromise.promisify
に移動してください。このメソッドにはnodeFunction
が使用され、と約束されたバージョンが返されます。これは、多かれ少なかれ、それが何をするか:
function promisifiedReadFile (filePath) {
return new Promise(function (fulfill, reject) {
require('fs').readFile(path, function (error, data) {
if (error) { reject(error) } else { fulfill(data) }
})
})
}
それは少し冗長ですが、あなたが見ることができるようにあなたが今、代わりにコールバックを受け入れるの約束を返すreadFile
のバージョンを持っています。もちろん、この例では、readFile
のためにハードコーディングされて、代わりに任意のnodeFunction
ためPromise.promisify
作品:
const promisifiedReadFile = Promise.promisify(require('fs').readFile)
2つのpromisifiedReadFile
方法は同じように動作します。
最後に、Promise.promisifyAll
がオブジェクトを取り出し、すべてのメソッドを見つけたら、それぞれにPromise.promisify
を適用します。
Promise.promisifyAll(require('fs'))
を呼び出すと、コールバックを受け入れる代わりにすべてのメソッドが約束を返すfs
モジュールのバージョンが返されます。あなたの例について
私はあなたが達成しようとしているかわからないんだけど、あなたが定義されたメソッドはnodeFunctions
ではありませんので、彼らはpromisifiedすることはできません。
出典
2017-02-14 20:21:36
Gpx
ドキュメントへのリンクを追加できますか? – Gpx
あなたのオブジェクト関数には**コールバック**がありませんので、約束するのは意味がありません。 Promisifyは、コールバックスタイルがあり、それを約束として使用したい場合に使用します。より良い助言を提供するために達成したいことをよりよく言う。 – Hosar
コードに非同期のものがない場合は、それを約束することはできません。 – Bergi