当前位置: 首页 > 面试题库 >

如何打破承诺链

符正信
2023-03-14
问题内容

我这样承诺

function getMode(){
    var deferred = Promise.defer();

    checkIf('A')
    .then(function(bool){
        if(bool){
            deferred.resolve('A');
        }else{
            return checkIf('B');
        }
    }).then(function(bool){
        if(bool){
            deferred.resolve('B');
        }else{
            return checkIf('C');
        }
    }).then(function(bool){
        if(bool){
            deferred.resolve('C');
        }else{
            deferred.reject();
        }
    });

    return deferred.promise;
}

checkIf返回一个promise,yes checkIf 不能被修改

我如何在第一场比赛中脱颖而出?(除了显式抛出错误以外,还有其他方法吗?)


问题答案:

我想你不想在这里连锁。以同步的方式,您会写

function getMode(){
    if (checkIf('A')) {
        return 'A';
    } else {
        if (checkIf('B')) {
            return 'B';
        } else {
            if (checkIf('C')) {
                return 'C';
            } else {
                throw new Error();
            }
        }
    }
}

这就是应如何将其转化为承诺:

function getMode(){
    checkIf('A').then(function(bool) {
        if (bool)
            return 'A';
        return checkIf('B').then(function(bool) {
            if (bool)
                return 'B';
            return checkIf('C').then(function(bool) {
                if (bool)
                    return 'C';
                throw new Error();
            });
        });
    });
}

if else诺言没有实现。



 类似资料:
  • 问题内容: 关于这两个重要来源:NZakas- 承诺链中的归还承诺 和MDN承诺,我想提出以下问题: 每次我们从承诺履行处理程序返回值时,该值如何传递给从同一处理程序返回的新承诺? 例如, 在这个例子中,是一个承诺。也是来自履行处理程序的承诺。但是。取而代之的是神奇地解决(如何?),然后将该值传递给的实现处理程序。即使是这里的句子也令人困惑。 您能给我解释一下这到底是怎么回事吗?我对这个概念感到困

  • 问题内容: 我有一个promise对象数组,必须按数组中列出的顺序来解决它们,即,在解析前一个元素之前,我们无法尝试解析一个元素(如方法一样)。 而且,如果一个元素被拒绝,则我需要链立即拒绝,而无需尝试解决以下元素。 如何实现此功能,或者该模式是否已有实现? 编辑 最初的答案表明,我们只能得到此类数组元素的结果,而不能执行它们,因为在此示例中它是预定义的。 但是,如何以避免提前执行的方式生成承诺数

  • 问题内容: AngularJS文档说: $ qpromise由模板引擎以角度识别,这意味着在模板中,您可以将附加到作用域的promise视为它们的结果值。 所以有人可以解释一下这种提琴无法正常工作的原因吗?不可能更改文本字段的值。但是分配保证$http服务返回作用域字段的工作就像一个超级按钮。 控制器: HTML: 问题答案: 您需要在promise对象上使用then()函数: 就您而言,我认为您

  • Promises是一种在JavaScript中实现异步编程的简洁方法(ES6新功能)。 在承诺之前,Callbacks用于实现异步编程。 让我们首先了解异步编程及其实现,使用Callbacks。 了解回调 函数可以作为参数传递给另一个函数。 这种机制被称为Callback 。 回调对事件有帮助。 以下示例将帮助我们更好地理解这一概念。 <script> function notifyA

  • 问题内容: 我正在从Angular的文档中查看此示例,但是我认为这可能总体上适用于Promise。下面的示例是从文档中逐字复制的,并附有评论: 我不清楚这是如何工作的。如果我可以调用第一个的结果并将它们链接起来(据我所知),那么它就是一个类型为Promise的对象。这不是一个。那么,“它的值将是promiseA的结果增加1”的含义是什么? 我应该以这种方式访问吗?成功回调如何返回承诺并返回“结果+

  • 问题内容: 这不是现实问题,我只是想了解如何创建承诺。 我需要了解如何对不返回任何内容的函数(例如setTimeout)作出承诺。 假设我有: 如何创建可以在准备就绪后返回的承诺? 我本来应该把它包起来带到某个地方: 但是我无法超越这个范围。 问题答案: 更新 在2017年,Promises内置在JavaScript中,并由ES2015规范添加(polyfill可用于IE8-IE11等过时的环境)