2016-04-29 24 views
0

私はこれらの2つの機能を1つずつ実行し、2つ目はfisrt(リスト)の出力を使用しています。関数を順番に実行する[Node JS]

私が望むのは、シーケンスで実行することです。あなたは助けてもらえますか?

gm_scrape.search_link(request, function(list){ 
    gm_scrape.fetch_profiles(list, function(profiles, request){ 
     console.log("the profil is "+profiles); 
    }); 
}); 

ありがとうございました!

+0

これらは順番に実行されています。最初に 'gm_scrape.search_link()'が実行され、終了するとコールバックを呼び出し、そのコールバックで 'gm_scrape.fetch_profiles()'が実行されます。正確な問題は、あなたが援助を必要としていることですか? – jfriend00

答えて

0

良い方法は、私は読みやすさのために略しのようなものだった

gm_scrape.search_link(request).then(function(list){ 

    return gm_scrape.fetch_profiles(list); 

}).then(function(profiles){ 

    console.log("the profil is "+profiles); 

}).catch(function(err){ console.warn(err); }); 

gm_scrape.search_link = function(request){ 
    return new Promise(function(resolve, reject){ 
     // async call... 
     .onsuccess: resolve(list) 
     .onfailure: reject(err) 

    }) 
} 

gm_scrape.fetch_profiles = function(list){ 
    return new Promise(function(resolve, reject){ 
     // async call... 
     .onsuccess: resolve(profiles) 
     .onfailure: reject(err) 

    }) 
} 

申し訳約束を使用することです。あなたは(jfriend00からのコメントによって示唆されるように)あなたの質問に提供された例は、順番に実行されているが、これはAJAX呼び出し

gm_scrape.search_link = function(req){ 
    return new Promise(function(resolve, reject){ 
     $http({ 
      method: 'POST', 
      url: req.url, 
      data: req.data 
     }).success(function successCallback(list) { 
      console.log(list); 
      resolve(list); 
     }).error(function(error) { 
      console.log(error); 
      reject(error); 
     }); 
    }) 
} 
+0

私はちょうど "使用約束"素敵な答えを入力していた! –

+0

ありがとう、私はこのエラーがあります。対処:解決(リスト) ^ SyntaxError:予期しないトークン。 –

+0

Promisesを使用してdbクエリなどの非同期呼び出しの結果を解決することができます。 –

0

との約束の一例です。 「死のピラミッド」を避けようとしているのならば、「スティーブン・カスパル」の示唆どおりに約束することができます。

しかし、同じことを行うための他の一般的な方法があります。あなたが埋め込まれた3-4のコールバックを持っていない限り、これは理にかなっていない可能性があります場合は

async.waterfall([ 
    function(callback) { 
    gm_scrape.search_link(request, function(list){ 
     callback(null, list); 
    }); 
    }, 
    function(callback) { 
    gm_scrape.fetch_profiles(list, function(profiles, request){ 
     callback(null, profiles); 
    }); 
    } 
], function(err, result) { 
    console.log("the profile is ", result); 
}); 

:これに取り組むために、他の一般的な方法の1つは、caolan/async's滝の方法を使用しています。このソリューションは、コールバックが厄介になる最後の結果に依存する長い一連のタスクを編成する方法が必要な約束なしに、既存のコードベースに合わせて設計されています。管理が難しい。これはまた、あなたのモジュールで約束が利用できず、ラップタイムを費やしたくない場合(これらのコールバックブレークはほとんどの約束モジュールによって提供されるヘルパーを約束するため)、より簡単な解決策になるかもしれません。

+0

ありがとうございます。しかし、この問題があります:SyntaxError:missing)引数リストの後の行番号 –

+0

残念ですコピーと貼り付けに間違いがありました。私は 'gm_scrape'メソッドが何をしているのか分からないのでテストする方法もありません。 – tsturzl

関連する問題