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

标签 javascript react-native ecmascript-6 redux-saga

我对 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/

相关文章:

javascript - 参数传输在 Angularjs 指令中不起作用

javascript - 为什么我们不在 render 方法中编写 axios.get(blabla) 呢?

ios - React Native 在设备 iOS 上运行崩溃

javascript - 如何在 JSDoc 中描述解构的对象参数

javascript - 如果一个纯函数返回一个不纯函数,它是纯函数吗?

javascript - 基于 HREF 的 Div 的非常简单的 .toggleClass

javascript - 如何使用下划线 + ES 6 设计更高效的循环

javascript - 这个 Javascript 代码是什么意思?

javascript - 在 React Native 中测试原生事件发射器和原生模块

Javascript链式解构