我这样承诺
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等过时的环境)