我是刚接触原生的新手,而且我一直在浏览代码片段,并对如何兑现承诺感到困惑。
我有一个事件处理程序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/