gpt4 book ai didi

javascript - 如何在传奇中使用警报,暂停它,并且仅在按下按钮时才继续?

转载 作者:行者123 更新时间:2023-12-01 00:37:33 25 4
gpt4 key购买 nike

我对 redux-saga 还不是很熟悉。我正在尝试在 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 的尝试之一。我尝试了不同的类似方法,例如调用生成器函数。
我搜索了很多,但我不知道我错过了什么。我不知道如何让它真正暂停传奇功能并适本地响应警报按钮。

最佳答案

您可以为 Alert 调用创建一个包装器,以便在完成后解析 Promise:

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);
}

关于javascript - 如何在传奇中使用警报,暂停它,并且仅在按下按钮时才继续?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57981670/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com