2017-07-09 18 views
0

そこ応答は最初の1から来た後にのみ二つの文を取得し、私は2番目1を実行したい - >Javascriptで前のフェッチ呼び出しから応答が来た後、別のフェッチを呼び出す方法は?

function CreateRide(userId){ 
    const baseUrl = "138.197.99.29:7000/createRide"; 
    var reqObj = {}; 
    var responseObj = {"success":false}; 
    let url = 'http://138.197.99.29:7000/createRide?lat=122.254&lng=14.144&vehicleID=vufn414&time=test'; 
    fetch(url) 
     .then((resp) => resp.json()) 
     .then(function (data) { 
      responseObj.success = true; 
      console.log(data.rideID); 
      return data.rideID; 
     }) 
    .catch(function (error) { 

      responseObj.success = false; 
      console.log(error) 
     }) 
} 

と - >

function StartRide(rideId){ 
    const baseUrl = "138.197.99.29:7000/createRide"; 
    var reqObj = {}; 
    var responseObj = {"success":false}; 
    let url = 'http://138.197.99.29:7000/startRide?rideID=' + rideId; 
    fetch(url) 
     .then((resp) => resp.json()) 
     .then(function (data) { 
      responseObj.success = true; 
      console.log(data); 
      return data.success; 
     }) 
     .catch(function (error) { 
      responseObj.success = false; 
      console.log(error) 
     }) 
} 

と私はStartRideを実行したいです応答はCreateRide

答えて

1

から来た後を呼び出した結果を返すあなたはCreateRideに持って約束が、を使用しますでは、関数を呼び出す場所でチェーンを使用することができます。

function CreateRide(userId){ 
    const baseUrl = "138.197.99.29:7000/createRide"; 
    var reqObj = {}; 
    var responseObj = {"success":false}; 
    let url = 'http://138.197.99.29:7000/createRide?lat=122.254&lng=14.144&vehicleID=vufn414&time=test'; 
    return fetch(url)         // <======= 
     .then((resp) => resp.json()) 
     .then(function (data) { 
      responseObj.success = true; 
      console.log(data.rideID); 
      return data.rideID; 
     }) 
    .catch(function (error) { 

      responseObj.success = false; 
      console.log(error) 
     }) 
} 

サイドノート:次に、あなたがreturnを追加していますのはここ

CreateRide(/*...*/).then(result => StartRide(/*...*/)).catch(/*...error handler...*/); 

を使用これはややスタイル/議論の問題ですが、また、CreateRideがエラーを食べ持っていない検討します;代わりに、エラーを伝播する(たとえば、約束を返すときにはcatchを持たない)、できるだけ最悪のレベルでエラーを処理する。


サイド注2:また、スタイルの問題が、圧倒的は、JavaScriptで、大会はコンストラクタ関数でない関数は、例えば、小文字で始めるということですcreateRideおよびstartRide

+0

ありがとうございます。また、後で自分の状態変数を変更する必要があるので、両方の関数が実行されているかどうかを知ることができます(Reactネイティブで小さなプロジェクトを開発中) –

+0

@PravandanChand:これはまったく同じ概念です。それに 'then'ハンドラを使います。あなたが 'then'ハンドラから約束を返すと、' then'約束はあなたが返す約束に従います。したがって、あなたが 'StartRide'から返す場合、' CreateRide(/*...*/)。then(result => StartRide(/*...*/))。then(result =>/* update state変数* /)。catch(/ * ...エラーハンドラ... * /); ' –

+0

@TJCrowderありがとうございました:) –

関連する問題