2017-02-14 6 views
0

私はpromisifyAllのしくみを理解しようとしています。私は彼らのドキュメントで与えられた例を理解しようとしています。誰も私に簡単な例を教えてください、どのように動作するのですか?私はそのコンセプトを理解しようとしており、どのようにそれを使うことができるのですか?ありがとうございますpromisifyAll in bluebird.js

var objects = {}; 

objects.first = function(){ 
    console.log("First one is executed"); 
} 

objects.second = function(){ 
    console.log("second one is executed"); 

} 

objects.third = function(){ 
    console.log("third one is executed"); 
} 

どのように私たちはオブジェクトの変数を約束できますか?またはそのようなものです。

+0

ドキュメントへのリンクを追加できますか? – Gpx

+0

あなたのオブジェクト関数には**コールバック**がありませんので、約束するのは意味がありません。 Promisifyは、コールバックスタイルがあり、それを約束として使用したい場合に使用します。より良い助言を提供するために達成したいことをよりよく言う。 – Hosar

+0

コードに非同期のものがない場合は、それを約束することはできません。 – Bergi

答えて

2

まず、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することはできません。

+0

ありがとうたくさん私はこれを調べます –

+0

'promisifyAll' *はあなたが渡すオブジェクトを突然変更することに注意してください。また、 'Async'という接尾辞を持つメソッドを追加しますが、' fs.readFile() 'は' fs.readFileAsync() 'になりますが、元の' fs.readFile() 'は同じ名前で利用できます。 –