2016-10-11 6 views
0

APIサービスからデータをフェッチしているこのVUEJS/VUEJS Resourcesスニペットがあります。APIサービスは200を返しますが、実際は404

fetchData: function(name){ 
      var self = this; 
      self.$http.get('http://www.apiservice.com/', { 
      params: { 
       city: name 
      }, 
      }).then((response) => { 
      // success callback 
      toastr.success('Success!'); 
      console.debug(response); 
      }, (response) => { 
      // error 
      toastr.error('Something went wrong!') 
      }); 
     } 

そして、それは常に200 OK応答を返すでしょう...だから私は本当に、その常に「成功」​​場合、toastr.errorを表示する方法がわかりません。

偽の応答は、{Response: "False", Error: "City not found!"}のようになります。

私の質問

どのように私は200 OKリターンの応答にfalseをフェッチし、エラーを投げることができますか?

+0

apiサーバーが応答で404を返さない限り、何らかのハックを使用しないと応答を返せません(応答を確認し、受け取った応答が期待どおりでない場合はエラー関数を呼び出します)。 –

答えて

1

「レスポンスが見つかりません」というメッセージがHTTP 200として返されるように思われますが、APIを制御できない場合は、success関数で処理する必要があります。

機能であなたのエラー処理コードを入れて、それに応じてそれを呼び出す:

fetchData: function(name){ 
    var self = this; 
    self.$http.get('http://www.apiservice.com/', { 
    params: { 
     city: name 
    }, 
    }).then((response) => { 
     // success callback 
     if (response.Response === "False") { 
      onError(response) 
     } else { 
      toastr.success('Success!'); 
      console.debug(response); 
     } 
    }, onError); 
} 

function onError(response) { 
    toastr.error('Something went wrong!') 
} 
+0

ありがとう!エラー 'ReferenceError:変数を見つけることができません:onError'行、'}、onError); '。 – Adam

0

あなたが拒否する決意から約束を切り替えるために連鎖する約束を使用することができます。

fetchData: function(name){ 
      var self = this; 
      self.$http.get('http://www.apiservice.com/', { 
      params: { 
       city: name 
      }, 
      }).then(response)=>{ 
       if(response.Response === "False"){ 
       return Promise.reject(response) 
       }else{ 
       return response 
       } 
      },(a)=>a).then((response) => { 
       // success callback 
       toastr.success('Success!'); 
       console.debug(response); 
      }, (response) => { 
       // error 
       toastr.error('Something went wrong!') 
      }); 
     } 

重要な部分はこれです:

then(response)=>{ 
    if(response.Response === "False"){ 
    return Promise.reject(response) 
    }else{ 
    return response 
    } 
},(a)=>a) 

したがって、応答が有効で、データにResponse: "False"私たちは拒否された約束を返します。それ以外の場合は、返信データを返すだけで解決済みの約束事に包まれ、それ以降はthenが前と同じように実行されますが、無効なデータは既に拒絶されています。

関連する問題