2017-08-17 6 views
0

私はReact Nativeを使ってiOSとAndroid用のアプリケーションをビルドしています。ここでは、ボタンをタップすると、外部関数からfetch関数を呼び出すだけです。 fetch関数はPOST要求をリンクに送信し、JSON応答を返します(JSONは正しい、Postmanでさまざまな方法でテストされています)。Reactネイティブフェッチの約束.then()はすぐに実行されません

.ththen()の後のコードはすぐに実行されませんが、画面をタップするか、ナビゲーションを使用して戻るか、マイナーな操作を実行することが問題です。

constructor(props) { 
    super(props); 
    console.log(this.props.navigation.state.params.email); 

    this.state = { 
    email: props.navigation.state.params.email, 
    value: '', 
    pressed: false 
    }; 

    this.verify = this.verify.bind(this); 
} 

呼び出す:私もこのようなコンストラクタでこの機能を結合してい 結合機能

verify() { 
    this.setState({ 
    pressed: true 
    }); 

    var self = this; 
    var theURL = "<URL>"; //Removed for question 

    fetch(theURL, { 
    method: 'POST', 
    headers: { 
     'Content-Type': 'application/json' 
    }, 
    body: JSON.stringify({ 
     uidOrEmail: this.state.email, 
     code: this.state.value 
    }) 
    }) 
.then(res => res.json()) 
.then(function(data) { 
    console.log(data); //PROBLEM: This doesn't execute immediately 
} 

FROM

呼び出しコード:ここで私が使用したコードですファンクション(UI)

<Button 
    disabled={this.state.pressed} 
    onPress={this.verify} 
    >{!this.state.pressed ? 'Verify' : 'Verifying...'}</Button> 

要約すると、フェッチ機能はすぐに約束を解決しません。

EDIT

いくつかのより多くの情報:

フェッチリンクが実際にFirebase関数のリンクです。どのようにその関数が返している:

response.status(200).send({status: 200, token: "ABC"}); 
+0

これは、 'fetch'がHTTPコールを行うのに時間がかかることがあるからです。 – Erazihel

+0

上記のコメントを基にして、 'fetch'は非同期です。すぐには実行されません。 –

+0

これは、.then()関数のためのものですね。フェッチが何かを返すまで待ち​​、それを実行しますか? – Fahmid

答えて

0

fetchPromiseオブジェクトを返します約束が成功した後、then()によって追加コールバックが呼び出されます。約束が失敗した場合は、catch()で追加されたコールバックが呼び出されます。

promiseのドキュメントをhttps://developer.mozilla.org/en-US/docs/Web/API/Fetch_APIhttps://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promiseにチェックすることができます。

関連する問題