Node.JS-非同期プログラミングの基礎、パート1
Node.JS 0.2.0の安定バージョンのリリース後、それを使用して一連のプログラミング記事を開始することにしました。
Node.JSの基本概念は、I / O操作はデフォルトで非同期として実装され、操作が完了するとコールバック関数が呼び出され、その最初のパラメーターがエラーまたはnullになることです。
非同期ネストを非表示
すべての親を含むディレクトリを作成する必要があるとします。 そして、それを作成できた場合にのみ、このディレクトリで書き込みを開始します。
非同期操作での作業の複雑さを隠すために、別の非同期メソッドでディレクトリを作成する作業を取り除きます。
var path = require( 'path' );
var fs = require( 'fs' );
var mkdir_p = function (pth, callback)
{
fs.stat(pth, function (err, stat)
{
if (!err && stat)
{
callback( null );
return ;
}
mkdir_p(path.dirname(pth), function (err)
{
if (err)
{
callback(err);
return ;
}
fs.mkdir(pth, 0755, callback);
});
});
};
* This source code was highlighted with Source Code Highlighter .
関数は最初にディレクトリの存在を確認し、存在する場合はエラーなしでコールバック関数を呼び出します。 ディレクトリが存在しない場合、親ディレクトリに対してmkdir_pが呼び出され、必要なディレクトリが作成されます。
ご覧のように、再帰を正常に実装し、Node.JSの標準としてコールバック関数にエラー情報を渡すことができました。
たとえば、次のように使用します。
mkdir_p(path.dirname(outPath), function (err)
{
if (err)
{
response.writeHead(500, { 'Content-Type' : 'text/plain' });
response.end( 'Cannot create directory' );
return ;
}
getFile(url, inPath, function (err)
{
if (err)
{
response.writeHead(500, { 'Content-Type' : 'text/plain' });
response.end( 'Cannot read file' );
return ;
}
transcode(inPath, outPath, function (err)
{
if (err)
{
response.writeHead(500, { 'Content-Type' : 'text/plain' });
response.end( 'Cannot transcode file' );
return ;
}
sendRemoveFile(outPath, response, function (err)
{
if (err)
{
console.log( 'Cannot send file' );
return ;
}
});
});
});
});
* This source code was highlighted with Source Code Highlighter .
次の記事では、外部プロセスでの作業について説明します。
All Articles