Nodejs非同期プロセスの枠組みasyncの方法
Asyncの簡単な紹介:
Aryncはプロセス制御ツールパッケージであり、直接的で強力な非同期機能を提供しています。Javascriptに基づいてNode.jsのデザインをしています。また、ブラウザで直接使用することもできます。Asyncは、一般的なmap、reduce、filter、forEachなどの約20の関数を提供しており、非同期フロー制御モードにはシリアル、パラレル、滝などが含まれています。
https://github.com/caolan/async
私たちがよく使うのは以下の4つです。シリアル無関連 シリアルは に関連しています。並列関連なし インテリジェント制御 1.async.series:シリアルには関連がない:
いくつかの関数や方法は順次実行しますが、彼らの間には連絡がなく、ファイルを書きたいです。書き終わったら、ユーザーのようにメールを送ります。この両者の間には必然的な連絡はありませんが、ファイルを作成してからメールを送る必要があります。
asyncにはこの流れを実現する方法があります。コードは下記の通り実現されます。
滝の流れ関数は、列の各関数をシリアルで実行して、最後にチューニングを行います。文法:async.waterfall(tasks、calback)の最初のパラメータtaskysは配列であり、配列は順次実行する必要がある関数を含んでいます。
第二のパラメータは反転関数で、滝の流れ関数(つまり、taskys配列の関数)がエラーが発生したときにこのコールバック関数を実行し、エラー情報を返します。滝の流れ関数が間違っていない場合は、taskys配列に含まれる関数を実行した後にこのコールバック関数を実行します。
使い方例:一般的な使い方:
taskは、前の関数が完了するまで、関数セットを並列に実行します。どの関数でもエラーが発生したら、すぐにコールバック関数を実行し、エラー情報を返します。エラーが発生していない場合は、すべてのtaskys関数を実行した後、戻り関数で結果を返します。
文法:async.parallelコード例:
以上は純粋なシリアル伝送で並行していますが、一つのシーンでシリアルを使ってもパラレルを使う必要がある場合、それぞれの書き込みで解決できますが、効率はあまり高くなく、メンテナンス性もあまり良くないので、autはこの問題を解決できます。
次のような場面:どこからデータを取得しましたか? は、ハードディスク上に新しいディレクトリを作成する 。データをディレクトリの下にあるファイル に書き込みます。メールを送り、ファイルを別添の形で他の人に送ります。 は1と2が並行して実行できることを知ることができます。3は1と2が完成するまで待つ必要があります。4は3が完成するまで待つべきです。 は、autを使用して を解決する。
1.1:made folder
1.1:got data
1.1:wrote file
email d file: myfile
err: null
レスリング: { makeFolder:'myfolder'は、
get Data:'mydata'
writeFile:'myfile'は、
email Files:'myfile'
)
atot:650.97 ms
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。
Aryncはプロセス制御ツールパッケージであり、直接的で強力な非同期機能を提供しています。Javascriptに基づいてNode.jsのデザインをしています。また、ブラウザで直接使用することもできます。Asyncは、一般的なmap、reduce、filter、forEachなどの約20の関数を提供しており、非同期フロー制御モードにはシリアル、パラレル、滝などが含まれています。
https://github.com/caolan/async
私たちがよく使うのは以下の4つです。
いくつかの関数や方法は順次実行しますが、彼らの間には連絡がなく、ファイルを書きたいです。書き終わったら、ユーザーのようにメールを送ります。この両者の間には必然的な連絡はありませんが、ファイルを作成してからメールを送る必要があります。
asyncにはこの流れを実現する方法があります。コードは下記の通り実現されます。
var async = require('async');
console.time('series');
async.series({
one: function(callback) {
callback(null, 'one');//callback('i am err','one');
},
two: function(callback) {
callback(null, 'two');
},
}, function(error, result) {
//
console.log('error: ' + error);
console.log('result: ' + result);
console.timeEnd('series');
});
// error: null
// result: [object Object]
// series: 4.472ms
2.async.waterfall:シリアルは関連があります。滝の流れ関数は、列の各関数をシリアルで実行して、最後にチューニングを行います。文法:async.waterfall(tasks、calback)の最初のパラメータtaskysは配列であり、配列は順次実行する必要がある関数を含んでいます。
第二のパラメータは反転関数で、滝の流れ関数(つまり、taskys配列の関数)がエラーが発生したときにこのコールバック関数を実行し、エラー情報を返します。滝の流れ関数が間違っていない場合は、taskys配列に含まれる関数を実行した後にこのコールバック関数を実行します。
使い方例:一般的な使い方:
async.waterfall([
myFirstFun,
mySecondFun,
myLastFun
],function(err,result) { // result
// result tasks (myLastFun) done
console.log(result); // myLastFun
})
function myFirstFun(callback) {
callback(null,'one','two');
}
function mySecondFun(arg1,arg2,callback) {
// arg1 'one' ,arg2 'two'
callback(null,'three');
}
function myLastFun(arg1,callback) {
// arg1 'three'
callback(null,'done');
}
3.async.parallel:並列無関係taskは、前の関数が完了するまで、関数セットを並列に実行します。どの関数でもエラーが発生したら、すぐにコールバック関数を実行し、エラー情報を返します。エラーが発生していない場合は、すべてのtaskys関数を実行した後、戻り関数で結果を返します。
文法:async.parallelコード例:
async.parallel([
function(callback) {
setTimeout(function() {
callback(null, 'one');
}, 200);
},
function(callback) {
setTimeout(function() {
callback(null, 'two');
}, 100);
}
],function(err, results) {
console.log(result)}
);
4.async.aut:インテリジェントコントロール以上は純粋なシリアル伝送で並行していますが、一つのシーンでシリアルを使ってもパラレルを使う必要がある場合、それぞれの書き込みで解決できますが、効率はあまり高くなく、メンテナンス性もあまり良くないので、autはこの問題を解決できます。
次のような場面:
var async = require('async');
console.time('auto');
async.auto({
getData: function(callback) {
setTimeout(function() {
console.log('1.1: got data');
callback(null, 'mydata');
}, 300);
},
makeFolder: function(callback) {
setTimeout(function() {
console.log('1.1: made folder');
callback(null, 'myfolder');
}, 200);
},
writeFile: ['getData', 'makeFolder', function(callback) {
setTimeout(function() {
console.log('1.1: wrote file');
callback(null, 'myfile');
}, 300);
}],
emailFiles: ['writeFile', function(callback, results) {
console.log('emailed file: ', results.writeFile);
callback(null, results.writeFile);
}]
}, function(err, results) {
console.log('err: ', err);
console.log('results: ', results);
console.timeEnd('auto');
});
結果は以下のとおりです1.1:made folder
1.1:got data
1.1:wrote file
email d file: myfile
err: null
レスリング: { makeFolder:'myfolder'は、
get Data:'mydata'
writeFile:'myfile'は、
email Files:'myfile'
)
atot:650.97 ms
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。