首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Javascript中模拟同步用户交互

在Javascript中模拟同步用户交互
EN

Stack Overflow用户
提问于 2017-03-07 06:18:03
回答 1查看 66关注 0票数 1

我有一系列问题要问用户,后面的问题取决于前面的问题。通过假设我们可以拥有同步的i/o,可以最简洁地表达这些信息,如下所示:

代码语言:javascript
复制
//'queryuser' is a callback which provides synchronous user interaction
function seriesOfQuestions(queryuser)
    var drink = queryuser("What would you like to drink?",["Tea","Coffee","Orange Juice"]);
    if (drink=="Tea" || drink=="Coffee")
    {
        var milk = queryuser("Would you like milk?",["Yes","No"]);
        var sugar = queryuser("Would you like sugar?",["Yes","No"]);
        if (milk=="Yes")
            var milk_type = queryuser("Normal or soya?",["Moo juice","Hippy beans"]);
    }
    queryuser("Would you like a biscuit?",["Yes","No"]);
    //...etc... deep decision tree, though note code paths can re-join for biscuits
}

当然,Javascript不是这样工作的;像$ionicPopup.show()这样的函数不会阻塞执行,而是在用户选择一个选项时调用回调(通过promise机制)。因此,如果我们对queryuser使用ionicPopup.show,我们将一次获得所有弹出窗口,并且将对null返回值执行决策树。

有没有一种方法可以将ionicPopup.show()或类似的东西包装在一个函数中,让它的行为像我们想要的queryuser那样?

(在编写C协同例程时,最好比Duff的设备简单一些...)

或者,如果失败,如何才能在不陷入回调地狱的情况下表达上述决策树呢?

EN

回答 1

Stack Overflow用户

发布于 2017-03-07 06:21:15

如果您的查询返回的是promises,那么您正在寻找ES8 async/await

但是,由于您询问的是协程,因此您还可以使用生成器函数,并通过查询框架异步驱动它们。尤其是CSP允许对异步用户界面进行很好的抽象。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42636655

复制
相关文章

相似问题

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