4

NodeJS私は最近遊んでいて、定期的なパターンの問題で立ち往生していることに気づきました:

いくつかの構成パラメーターに応じて、メイン操作を実行していますが、追加の手順を実行する必要がありますが、この手順は非同期です:

    if(request.config.save) {

        fs.writeFile(request.config.save, decryptedData, function(err) {
            // Continue the operation with a callback...
            // Perform some other ops.
            if(typeof callback == 'function') callback(decryptedData);
        }.bind(this));

    } else {

        // Continue the same operation without a callback
        // Perform some other ops.
        if(typeof callback == 'function') callback(decryptedData);

ご覧のとおり、メインエンディング(コールバック)が2回呼び出されるため、このコードはDRYではありません。

私が見る唯一の方法は関数を使用することです(しかし、ここでも関数呼び出しはDRYではありません...そしてコードはこの方法で本当に肥大化する可能性があります...

それで、これを解決するためのかなり忍者のトリックはありますか?

4

2 に答える 2

4

ええと、1行のコードはそれほど反復的ではありませんが、それ以上のことをしていると、非常に乾燥しなくなる可能性があります。最終的なロジックを関数にラップし、それを条件内で呼び出すのはどうですか?

var endTick = function(){
    if(typeof callback == 'function') callback(decryptedData);
}

if(request.config.save) {

    fs.writeFile(request.config.save, decryptedData, function(err) {
        // Continue the operation with a callback...
        // Perform some other ops.
        endTick();
    }.bind(this));

} else {

    // Continue the same operation without a callback
    // Perform some other ops.
    endTick();
}
于 2012-06-20T16:38:03.440 に答える
0
function cb() {
   if (typeof arguments[0] === 'function')
      arguments[0].apply(null, Array.prototype.slice.call(arguments,1));
}

チェックなしbind通常の関数呼び出しよりも約10文字長くする必要があります(必要になる場合があります) 。また、4文字を超えないようにする必要があります。typeofbind

どこかでいくらかの代償を払わずにこれを解決する方法はありません。

于 2012-06-20T16:43:15.463 に答える