我还不太熟悉复古传奇。我试图在saga函数中使用警报,以防止API的超时响应。我强迫你恢复暂停警报开始工作了。
然而,这一传奇仍在继续。我不知道如何暂停它,只有当用户按下“确定”按钮的警报。我的意图是显示连接或API问题,在警报或模式,并继续,只有当它被恢复。
function* sagaExample (action) {
// code
const response = yield call(apiRequest, data) // It will return "TIMEOUT" string in case of timeout
if (response === "TIMEOUT") {
var timeout = yield call(function* () {
try {
Alert.alert(
"No connection",
"Message",
[{text: "OK", onPress: function() { return true }}], // I want this function to make Saga continue
{cancelable: true},
)
} catch(error) {
return error
}
});
}
console.log(timeout) // It returns undefined
if (timeout) {
// it never runs
}
// code
}这是使用try/catch的尝试之一。我尝试了不同的类似方法,比如调用生成器函数。
我找了很多,但我不知道我错过了什么。我不知道如何使它真正地暂停佐贺功能,并适当地响应警报按钮。
发布于 2019-09-17 20:52:48
您可以为您的Alert调用创建一个包装器,该包装将在承诺完成后解析:
function wrappedAlert() {
return new Promise(resolve => {
Alert.alert(
"No connection",
"Message",
[{text: "OK", onPress: function() { resolve(); }}], // I want this function to make Saga continue
{cancelable: true, onDismiss: function() {resolve(); }},
)
});
}
const response = yield call(apiRequest, data) // It will return "TIMEOUT" string in case of timeout
if (response === "TIMEOUT") {
var timeout = yield call(wrappedAlert);
}发布于 2019-09-17 20:52:39
Sagas为等待承诺提供了内置的支持,因此我会将其封装在一个承诺中,并做出如下承诺:
if (response === 'TIMEOUT') {
yield new Promise((resolve) => {
Alert.alert(
'No connection',
'Message',
[{ text: "OK", onPress: resolve }],
{ cancelable: true },
);
});
}https://stackoverflow.com/questions/57981670
复制相似问题