首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在传奇中使用警报,将其挂起,并仅在按下按钮时才继续?

如何在传奇中使用警报,将其挂起,并仅在按下按钮时才继续?
EN

Stack Overflow用户
提问于 2019-09-17 20:31:03
回答 2查看 2.4K关注 0票数 0

我还不太熟悉复古传奇。我试图在saga函数中使用警报,以防止API的超时响应。我强迫你恢复暂停警报开始工作了。

然而,这一传奇仍在继续。我不知道如何暂停它,只有当用户按下“确定”按钮的警报。我的意图是显示连接或API问题,在警报或模式,并继续,只有当它被恢复。

代码语言:javascript
复制
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的尝试之一。我尝试了不同的类似方法,比如调用生成器函数。

我找了很多,但我不知道我错过了什么。我不知道如何使它真正地暂停佐贺功能,并适当地响应警报按钮。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-09-17 20:52:48

您可以为您的Alert调用创建一个包装器,该包装将在承诺完成后解析:

代码语言:javascript
复制
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);
}
票数 4
EN

Stack Overflow用户

发布于 2019-09-17 20:52:39

Sagas为等待承诺提供了内置的支持,因此我会将其封装在一个承诺中,并做出如下承诺:

代码语言:javascript
复制
if (response === 'TIMEOUT') {
  yield new Promise((resolve) => {
    Alert.alert(
      'No connection',
      'Message',
      [{ text: "OK", onPress: resolve }],
      { cancelable: true },
    );
  });
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57981670

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档