0

ここにコードを入力してください私は次のコードを持っています

function a(){alert("a");}

関数bを次のように作成したい

function b(){alert("a"); alert("b");}

私のアプローチは次のようなものです

var b = a + alert("b");

これはもちろん機能していません。しかし、これをサポートする何らかのライブラリがあるかどうか疑問に思っています。

編集:達成したいことをより明確にするために、シナリオを説明する必要があるかもしれません。

複数の非同期呼び出しを処理するために async.js ライブラリを使用しています。私のコードは次のようになります

var values = {};
...
function all() {
    var allDfd = $.Deferred();
    async.parallel(
            [function (callback) {
                remoteCall(function (result) {
                    values.v1 = result;
                    callback(null, 'one');
                });
            },
            function (callback) {
                remoteCall(function (result) {
                    values.v2 = result;
                    callback(null, "two");
                });
            },
            function (callback) {

                remoteCall(function (result) {

                    values.v3 = result;
                    callback(null, "three");
                });
            }], function (err, results) {
                allDfd.resolve();
            });
    return allDfd.promise();
}

明らかに、私を悩ませている反復コードがたくさんあります。したがって、私の考えは、定型的なタスクを実行する関数 asyncCall を作成することです。アイデアは

   var values = {};
...
function all() {
    var allDfd = $.Deferred();
    function getAsyncCall (func, innerCallback, callback) {
        return function asyncCall(func, innnerCallback, callback){
            func(innerCallback + callback(null));  // combine innerCallBack and callback code
        }
    }

    async.parallel(
            [getAsyncCall(remoteCall, function(result){values.v1=result;},callback),
             getAsyncCall(remoteCall, function(result){values.v2=result;},callback),
             getAsyncCall(remoteCall, function(result){values.v3=result;},callback),
            ], function (err, results) {
                allDfd.resolve();
            });
    return allDfd.promise();
}

コメントのある行は、私が熟考しているものです。内部コールバックと外部コールバックを組み合わせた新しい関数を作成しようとしています。

4

2 に答える 2

4

できるよ

var b = function() { a(); alert('b'); }
于 2012-06-29T18:38:36.737 に答える
1

あなたは書くことができます:

var a=function(){alert("a");}

var b=function(){a(); alert("b");}

さらに、関数構成関数全体を作成することもできます。

function compose( functions ) {
   return function(){ 
      for(var i=0; i!=functions.length; ++i) {
        functions[i]();
      }
   };
}

var c=compose( [a, function(){ alert("b"); }] );

( http://jsfiddle.net/xtofl/Pdrge/で作業中を参照してください)

于 2012-06-29T18:41:39.770 に答える