Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 反应本机获取承诺。然后()不立即执行_Javascript_Firebase_React Native - Fatal编程技术网

Javascript 反应本机获取承诺。然后()不立即执行

Javascript 反应本机获取承诺。然后()不立即执行,javascript,firebase,react-native,Javascript,Firebase,React Native,我正在使用React Native为iOS和Android构建应用程序。在这里,只要点击一个按钮,我就可以从外部函数调用fetch函数。fetch函数向链接发送POST请求,并返回JSON响应(JSON是正确的,以各种方式使用Postman进行测试) 问题是.then()之后的代码不会立即执行,而是在我点击屏幕或使用导航返回或执行某种小动作之后执行。以下是我使用的代码: 从函数调用代码 verify() { this.setState({ pressed: true });

我正在使用React Native为iOS和Android构建应用程序。在这里,只要点击一个按钮,我就可以从外部函数调用fetch函数。fetch函数向链接发送POST请求,并返回JSON响应(JSON是正确的,以各种方式使用Postman进行测试)

问题是.then()之后的代码不会立即执行,而是在我点击屏幕或使用导航返回或执行某种小动作之后执行。以下是我使用的代码:

从函数调用代码

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
}
从UI调用函数

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

fetch
将返回一个
Promise
对象,Promise成功后将调用
then()
添加的回调。如果承诺失败,将调用由
catch()
添加的回调


您可以在和中检查
fetch
promise
文档。

这是因为
fetch
发出一个可能需要一些时间的HTTP调用?基于上述注释,
fetch
是异步的。它不应该立即执行。这就是.then()函数的作用,不是吗?等待fetch返回某个内容然后执行它?//问题:这不会立即执行
<Button
  disabled={this.state.pressed}
  onPress={this.verify}
  >{!this.state.pressed ? 'Verify' : 'Verifying...'}</Button>
response.status(200).send({status: 200, token: "ABC"});