gpt4 book ai didi

javascript - 学习 promise 和异常(exception)与 Q 中的拒绝

转载 作者:搜寻专家 更新时间:2023-11-01 00:45:26 25 4
gpt4 key购买 nike

我的印象是 promise 中的异常会触发后续的失败处理程序,但我没有在这段代码中看到它发生:

var Q = require('q');

function x() {
console.log('x');
var deferred = Q.defer();

setTimeout(
function() {
console.log('resolving x');
deferred.resolve('hi');
},
1000
);

return deferred.promise;
}

function y() {
console.log('y');
var deferred = Q.defer();

setTimeout(
function() {
console.log('throwing in y');
throw new Error('Oih!');
},
1000
);

return deferred.promise;
}

x().then(y).then(
function () {
console.log('yes');
},
function () {
console.log('no');
}
);

是我做错了什么,还是我理解错了?

最佳答案

你正在混合回调和 promise + 你有一个延迟反模式的案例。使用 Q.delay 或像这样的包装器:

function delay(ms) {
var d = Q.defer();
setTimeout(d.resolve, ms);
return d.promise;
}

既然有用于超时的 promise API,就没有理由使用 setTimeout:

function x() {
return delay(1000).then(function () {
console.log("hi");
});
}

function y() {
return delay(1000).then(function () {
console.log('throwing in y');
throw new Error('Oih!');
});
}

使用:

x()
.then(y)
.then(function() {
console.log('yes');
})
.catch(function(e) {
console.log('no');
});

关于javascript - 学习 promise 和异常(exception)与 Q 中的拒绝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20041737/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com