どのように関数をプロモーションで実現しますか?
3313 ワード
どのように関数をプロモーションで実現しますか?
これはいい問題だと思います.現在、私の会社では、
神様は光が欲しいと言って、光があります.私も言いたいのですが、大神さんが解決すると言って
1 promisifyとは?
簡単に言えば、
2 promisifyの使用
次に、
2.1 promisify
ここで説明したいのですが、
二つの意味が含まれています. nodeCallbackサイン
このコールバック関数の署名は必ずこうなります.
nodeCallBackの出現順
はい、こんなに多くの
2.2 promisifyall
もっとはっきり言ってください.
3結論
これはいい問題だと思います.現在、私の会社では、
NodeJS
で開発すれば、フレームワークから具体的なアプリケーション・インスタンスまで、すべてpromise
を中心とした開発方式に移行しました.メリットは、みんながpromise
を使って非同期方式を解決することであり、リフレクトを考慮する必要はない(callback
).しかし、事情にはいつも特例があり、現実のnpm
にはまだ多くの倉庫がpromise
で実現されていない.このように使用者につらい思いをさせて、node
を使ってpromise
が現れました.世界はどうしてこんなに散らかっていると思いますか?神様は光が欲しいと言って、光があります.私も言いたいのですが、大神さんが解決すると言って
callback
があります.1 promisifyとは?
簡単に言えば、
promoisify
はpromisify
関数を持って、callback
を再利用して実現される技術案であり、それは一苦労にして解決できます.どのように関数をpromise
で再実現するかという問題です.2 promisifyの使用
promise
の使用は、もちろん、あるpromisify
の実現から逸脱できない.ここでpromise
を選択します.それは十分に強いので、勉強には十分です.次に、
bluebird
におけるpromise
に関するいくつかの方法を説明する.bluebird
のpromisify
において、2つの方法は、それぞれプロモーションとプロモーションです.2.1 promisify
bluebird
は、1つのAPI
形式の関数呼び出しをprmoisify
に変換するものである.ここで説明したいのですが、
nodeCallback
とはどういう意味ですか?promise
はnodeCallback
の常用語である.表現とは、エラー優先のコールバック関数の総称である.二つの意味が含まれています.
nodeCallback
コールバック関数署名.Nodojs
コールバック関数が現れる位置.このコールバック関数の署名は必ずこうなります.
//
function fooCallBack(err, a, b){
// something
console.log(a,b);
}
//
function foo1CallBack(a,b,err){
}
Nodejs
関数の呼び出しパラメータのうち、最初のパラメータは、nodeCallback
、すなわちnodeCallBack
関数の最初のパラメータが必ず入ってくるのはfooCallBack
であり、他のパラメータではないことがわかる.この条件を満たせば、err
と呼ぶことができる.nodeCallBackの出現順
noodeCallBack
は、非同期関数の最後に必ず現れる.
// 。
function foo(a,b,nodeCallback){
// pass
}
// nodeCallback
function foo(a,nodeCallback,b){
// pass
}
署名と順序が満たされていれば、err
と呼ぶことができる.nodeCallback
はどこにありますか?教えてあげましょう.全部のnodeCallBack
標準カバンの中の非同期のところは全部それです.はい、こんなに多くの
nodeCallBack
を言いましたが、今はnodeCallback
はどうやって使いますか?
const Promise = require('bluebird');
const fs = require('fs');
// , callback nodeCallback
fs.readFile('./test.js',function(err,data){
console.log(data);
});
// promisify
const readFileAsync = Promise.promisify(fs.readFile);
readFileAsync('./test.js').then(function(data){
console.log(data);
}).catch(console.log);
簡単でしょう.具体的に実現するならともかく、知りたいのはNodeJS
に行きましょう.2.2 promisifyall
nodeCallback
が一度に関数を回転することしかできないというなら、promosify
の役割は一度に一ライブラリのファイルを転送することです.もっとはっきり言ってください.
google
は、1つのライブラリの関数を全部promisify
の形にして、変更後の関数をpromisifyall
のサフィックスにしてもいいです.コードを見る:const Promise = require('bluebird');
const fs = Promise.promisifyall(require('fs'));
fs.readFileAsync('./test.js').then(function(data){
console.log(data);
}).catch(console.log);
上記から分かるように、promisifyall
という標準ライブラリは、promise
を経て、すべての関数がAsync
によって化されました.fs
によって化された関数名は、promisifyall
となる.3結論
promise
とpromise
という二つの方法をマスターしたら、みんなはこれからきっと正しいと思います.