我是刚接触原生的新手,而且我一直在浏览代码片段,并对如何兑现承诺感到困惑。

我有一个事件处理程序onRefresh(),当我下拉列表时会调用该事件处理程序,而我尝试使用它返回true / false时使用apiSearchDB的返回值。

onRefresh = () => {
  this.setState({...}, () => {
    return this.apiSearchDB()
      .then(function(response) {
        console.log(response);
      })
      .catch((error) => {
        console.log(error);
      });
  })
}

apiSearchDB = () => {
    return fetch('/some_endpoint')
     .then((response) => response.json())
     .then((json) => {
       this.setState({
          ...
       }, () => {return true})
       return true;
    }).catch((error) => {
       console.error(error);
       return false;
    })
 }


console.log(response);行仅显示undefined,我不知道为什么。

我的经理也可以写成

onSearch = () => {
   return new Promise((resolve, reject) => {
      var response = this.apiSearchDB();
       response
          ? resolve();
          : reject();
        }
   });
 }


还是onSearch = () => {...}function onSearch(){...}

先感谢您!

最佳答案

您应该阅读有关使用promises的更多信息(优秀文章-We have a problem with promises)。但是,在这种情况下有两个基本规则可以帮助您:


承诺返回的值包含在承诺中。
承诺可以连锁。


apiSearchDB应该返回一个承诺,其中包含json作为已解决的值,而error作为被拒绝的值:

apiSearchDB = () =>
  fetch('/some_endpoint')
    .then((response) => response.json())
    .then((json) => json)
    // can be removed unless you want to do something with the error before passing it on
    .catch((error) => Promise.reject(error));


onRefresh(或onSearch)方法应从apiSearchDB获取承诺,并添加其自己的链。解决承诺应使用then处理程序处理。如果它是拒绝的值,它将由catch处理程序处理:

onRefresh = () =>
  this.apiSearchDB()
    .then((response) => {
      console.log(response);

      // do something with response
      this.setState({...}, () => {

      });

      return response;
    })
    .catch((error) => {
      console.log(error);

      // do something with error
      this.setState({...}, () => {

      });
    });
}

关于javascript - 通过函数React Native传递 promise ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49953583/

10-10 14:10