誰かが私にnodeJsコールバックの簡単な例を与えることができます、私はすでに多くのウェブサイトで同じものを検索しましたが、それを正しく理解することができません、私に簡単な例をください。
getDbFiles(store, function(files){
getCdnFiles(store, function(files){
})
})
そのようなことをしたいのですが….
var myCallback = function(data) {
console.log('got data: '+data);
};
var usingItNow = function(callback) {
callback('get it?');
};
今すぐノードまたはブラウザのコンソールを開き、上記の定義を貼り付けます。
最後に次の行でそれを使ってください。
usingItNow(myCallback);
ノードスタイルのエラー規約に関して
コスタは、ノードエラーのコールバック規約を守るかどうか、これはどうなるのかと尋ねました。
この規約では、コールバックは少なくとも1つの引数、最初の引数をエラーとして受け取ることを想定しています。状況に応じて、オプションで1つ以上の追加の引数があります。この場合、コンテキストは上記の例です。
ここで私たちの例をこの規約に書き換えます。
var myCallback = function(err, data) {
if (err) throw err; // Check for the error and throw if it exists.
console.log('got data: '+data); // Otherwise proceed as usual.
};
var usingItNow = function(callback) {
callback(null, 'get it?'); // I dont want to throw an error, so I pass null for the error argument
};
エラーケースをシミュレートしたい場合は、usingItNowを次のように定義できます。
var usingItNow = function(callback) {
var myError = new Error('My custom error!');
callback(myError, 'get it?'); // I send my error as the first argument.
};
最終的な使い方は上記とまったく同じです。
usingItNow(myCallback);
動作の違いは、定義したusingItNow
のバージョンによって異なります。最初の引数のコールバックに "truthy値"(Errorオブジェクト)を提供するもの、またはエラーの場合はnullを提供するものです。引数。
コールバック関数は、他の関数に渡す関数であり、後でその関数で呼び出すことができます。これは非同期でよく見られます API s; API呼び出しは非同期であるためすぐに返されるので、非同期タスクの実行が完了したときにAPIが呼び出すことができるように関数を渡します。
私がJavaScriptで考えることができる最も簡単な例はsetTimeout()
関数です。これは2つの引数を受け取るグローバル関数です。最初の引数はコールバック関数で、2番目の引数はミリ秒単位の遅延です。この関数は適切な時間待機してからコールバック関数を呼び出すように設計されています。
setTimeout(function () {
console.log("10 seconds later...");
}, 10000);
上記のコードを見たことがあるかもしれませんが、渡された関数がコールバック関数と呼ばれていることに気付かなかっただけです。より明確にするために、上記のコードを書き直すことができます。
var callback = function () {
console.log("10 seconds later...");
};
setTimeout(callback, 10000);
Nodeはそれが行うことすべてにおいて非同期になるようにゼロから構築されているので、コールバックはNode内の至る所で使用されます。ファイルシステムと通信しているときでも。そのため、多数の内部Node APIが、変数に代入できるデータを返すのではなく、コールバック関数を引数として受け取ることがあります。代わりに、コールバック関数を呼び出して、必要なデータを引数として渡します。たとえば、ファイルを読み込むためにNodeのfs
ライブラリを使うことができます。 fs
モジュールは、readFile
およびreadFileSync
という2つの固有のAPI関数を公開しています。
readFile
関数は非同期ですが、readFileSync
は明らかに非同期です。 readFile
とreadFileSync
ではなくreadFile
とreadFileAsync
と呼ばれているので、可能な限り非同期呼び出しを使用するつもりであることがわかります。これは両方の機能を使用する例です。
同期:
var data = fs.readFileSync('test.txt');
console.log(data);
上記のコードは、test.txt
のすべての内容がメモリに読み込まれ、変数data
に格納されるまでスレッドの実行をブロックします。ノードでこれは通常悪い習慣と考えられます。ただし、簡単で面倒なことをするための簡単な小さなスクリプトを作成するときなど、便利な場合もあります。1ナノ秒ごとにできる限り節約することにはあまり関心がありません。
非同期(コールバックあり):
var callback = function (err, data) {
if (err) return console.error(err);
console.log(data);
};
fs.readFile('test.txt', callback);
まず、2つの引数err
とdata
を受け入れるコールバック関数を作成します。非同期関数の問題の1つは、エラーをトラップすることがより困難になることです。そのため、多くのコールバックスタイルのAPIは、コールバック関数の最初の引数としてエラーを渡します。他のことをする前にerr
に値があるかどうかをチェックするのがベストプラクティスです。もしそうなら、コールバックの実行を停止し、エラーをログに記録します。
同期呼び出しは、try/catch
ブロックを使用して簡単にキャッチできるため、スローされた例外がある場合に有利です。
try {
var data = fs.readFileSync('test.txt');
console.log(data);
} catch (err) {
console.error(err);
}
非同期関数ではそのようには機能しません。 API呼び出しはすぐに戻るので、try/catch
に追いつくものはありません。コールバックを使用する適切な非同期APIは、常にそれ自体のエラーをキャッチしてから、それらのエラーをコールバックに渡します。そこで、必要に応じて処理できます。
ただしコールバックに加えて、promiseと呼ばれる一般的に使用されている別の人気のあるスタイルのAPIがあります。あなたがそれらについて読みたいのであれば、あなたは私がこの答えに基づいて書いたブログ記事全体を読むことができます ここ 。
これは、fs.readFile
とfs.writeFile
を使用してテキストファイルをコピーする例です。
var fs = require('fs');
var copyFile = function(source, destination, next) {
// we should read source file first
fs.readFile(source, function(err, data) {
if (err) return next(err); // error occurred
// now we can write data to destination file
fs.writeFile(destination, data, next);
});
};
これはcopyFile
関数の使用例です。
copyFile('foo.txt', 'bar.txt', function(err) {
if (err) {
// either fs.readFile or fs.writeFile returned an error
console.log(err.stack || err);
} else {
console.log('Success!');
}
});
一般的なnode.jsパターンは、コールバック関数の最初の引数がエラーであることを示唆しています。すべての制御フローモジュールがそれに依存しているため、このパターンを使用する必要があります。
next(new Error('I cannot do it!')); // error
next(null, results); // no error occurred, return result
あなたが読むことができるのと同じくらい単純なこの例を試してください、単にアプリケーションを実行するためにsave newfile.js do node newfileをコピーしてください。
function myNew(next){
console.log("Im the one who initates callback");
next("nope", "success");
}
myNew(function(err, res){
console.log("I got back from callback",err, res);
});
次のように単純な関数を作成しています。
callBackFunction (data, function ( err, response ){
console.log(response)
})
// callbackfunction
function callBackFuntion (data, callback){
//write your logic and return your result as
callback("",result) //if not error
callback(error, "") //if error
}
const fs = require('fs');
fs.stat('input.txt', function (err, stats) {
if(err){
console.log(err);
} else {
console.log(stats);
console.log('Completed Reading File');
}
});
'fs'はあなたがファイルを読むのを助けるノードモジュールです。コールバック関数はあなたの 'input.txt'という名前のファイルが実行される前に完全に読み込まれていることを確認します。 fs.stat()関数は、ファイルサイズ、作成日、変更日などのファイル情報を取得します。
callback
は、パラメータとしてHigher Order Function
に渡される関数です( wikipedia )。コールバックの簡単な実装は次のようになります。
const func = callback => callback('Hello World!');
関数を呼び出すには、単純に定義された関数への引数として別の関数を渡します。
func(string => console.log(string));