我有两个函数,它们是异步和返回的promise,第一个的输出必须被送到第二个,这必须包含在第三个函数中。调用者模块调用第三个函数,并且不必知道内部有2个函数。调用者代码能够捕获所有拒绝,但它不会打印已解析的值。
代码有什么问题?
function firstfn(x) {
return new Promise(function(resolve, reject) {
if (x === 0)
reject(new Error("not a valid num"));
else {
setTimeout(function() {
console.log("successfully resolving1");
resolve(x * 2);
}, 500);
}
});
}
function secondfn(y) {
return new Promise(function(resolve, reject) {
if (y === 100) reject(new Error("reject from 2"));
else {
setTimeout(function() {
console.log("successfully resolving2");
resolve(y + 2);
}, 500);
}
});
}
function getsecondfn(y) {
firstfn(y)
.then(function(response) {
return secondfn(response);
})
}
function caller(inp) {
getsecondfn(inp)
.then(res => {
console.log(res);
})
.catch(function(err) {
console.log(err);
})
}
caller(2);
上面的代码不打印6但是当值为0或50时正确拒绝。
答案 0 :(得分:2)
问题是由getsecondfn
引起的,因为您没有在其中返回Promise
(意味着then
阻止caller
功能赢了,不会触发)。
参考下面的固定演示:
function firstfn(x) {
return new Promise(function(resolve, reject) {
if (x === 0)
reject(new Error("not a valid num"));
else {
setTimeout(function() {
console.log("successfully resolving1");
resolve(x * 2);
}, 500);
}
});
}
function secondfn(y) {
return new Promise(function(resolve, reject) {
if (y === 100) reject(new Error("reject from 2"));
else {
setTimeout(function() {
console.log("successfully resolving2");
resolve(y + 2);
}, 500);
}
});
}
function getsecondfn(y) {
return firstfn(y)
.then(function(response) {
return secondfn(response);
});
}
function caller(inp) {
getsecondfn(inp)
.then(res => {
console.log(res);
})
.catch(function(err) {
console.log(err);
})
}
caller(2);