JavaScript连锁承诺不会被拒绝

JavaScript连锁承诺不会被拒绝,第1张

JavaScript连锁承诺不会被拒绝

对我来说,这个结果没有意义。通过附加到此诺言链,每个人都暗示着它的意图是,它取决于d1的成功解析以及结果沿链向下传递

否。您所描述的不是链,而是将所有回调附加到

d1
。但是,如果要与链接
then
,则for的结果
promise2
取决于的分辨率
promise1

以及
then
回调如何对其进行处理

文档状态:

为回调结果返回一个新的promise。

.then
通常根据Promises /
A规范
(或更严格的Promsises / A +
1)来查看该方法。这意味着回调外壳程序返回的promise将被同化为的解决方案
promise2
,并且如果没有成功/错误处理程序,则相应的结果将被直接传递给
promise2
-因此,您可以简单地
省略处理程序 以传播错误。

但是,如果 处理 了错误,则结果

promise2
将被视为固定的并且将使用该值来实现。如果您不希望这样做,则必须
重新
throw
输入错误
,就像在try-catch子句中一样。另外,您可以从处理程序中返回(待)拒绝的承诺。不知道Dojo拒绝的方式是什么,但是:

var d1 = d();var promise1 = d1.promise.then(    function(wins) { console.log('promise1 resolved'); return wins;},    function(err) { console.log('promise1 rejected'); throw err;});var promise2 = promise1.then(    function(wins) { console.log('promise2 resolved'); return wins;},    function(err) { console.log('promise2 rejected'); throw err;});var promise3 = promise2.then(    function(wins) { console.log('promise3 resolved'); return wins;},    function(err) { console.log('promise3 rejected'); throw err;});d1.reject(new Error());

鲍勃在没有自己的情况下如何从金杰那里得到一个蓝色小部件

他不应该。如果没有错误处理程序,他将仅感知到消息((来自John的(来自发行商)John的)来自Ginger的消息),没有剩余的小部件。但是,如果Ginger为这种情况设置了一个错误处理程序,那么如果John或其分销商没有蓝色的东西,她仍然可以通过给鲍勃一个绿色的小部件实现自己的诺言,即给鲍勃一个小部件。

要将错误回调转换为metapher,

return err
从处理程序中就像是说“如果没有小部件,请给他注意没有小部件-它与所需的小部件一样好”。

在数据库情况下,如果db.query失败,它将调用第一个的err函数,然后

……这意味着错误在那里得到处理。如果不这样做,则忽略错误回调。顺便说一句,您的成功回调没有

return
建立它们的承诺,因此它们似乎毫无用处。正确的是:

var promise = db.query({parent_id: value});promise.then(function(query_result) {    var first_value = {        parent_id: query_result[0].parent_id    }    var promise = db.put(first_value);    return promise.then(function(first_value_result) {        var second_value = { reference_to_first_value_id: first_value_result.id        }        var promise = db.put(second_value);        return promise.then(function(second_value_result) { return values_successfully_entered();        });    });});

或者,由于您不需要闭包来访问先前回调的结果值,甚至:

db.query({parent_id: value}).then(function(query_result) {    return db.put({        parent_id: query_result[0].parent_id    });}).then(function(first_value_result) {    return db.put({        reference_to_first_value_id: first_value_result.id    });}.then(values_successfully_entered);


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5147406.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-18
下一篇 2022-11-18

发表评论

登录后才能评论

评论列表(0条)

保存