提问人:leeyh 提问时间:11/17/2023 最后编辑:PM 77-1leeyh 更新时间:11/17/2023 访问量:53
JavaScript promise 和 catch
javascript promise and catch
问:
我正在研究javascript承诺。第一个代码工作正常,但第二个代码出现错误。
捕获错误时,调用拒绝函数还不够吗?我不明白在这种情况下使用和不使用return语句之间的区别。
我希望不仅第一个代码,而且第二个代码都能正常工作
const f1 = () => {
return new Promise((res, rej) => {
setTimeout(() => {
res("number1:complete")
}, 2000)
})
}
const f2 = (message) => {
console.log(message)
return new Promise((res, rej) => {
setTimeout(() => {
rej("number2:fail")
}, 3000)
})
}
//first code >> success
f1()
.then(a => {
return f2(a)
})
.catch(console.log)
//second code >> error
f1()
.then(a => {
f2(a)
})
.catch(console.log)
答:
1赞
Shanu T Thankachan
11/17/2023
#1
在第二个代码片段中,缺少 return 语句
then(a => { return f2(a) })
评论
1赞
Rory McCrossan
11/17/2023
OP 知道这一点,这就是为什么他们要问这个问题:When catching errors, isn't it sufficient for the reject function to be called? I don't understand the difference between using and not using the return statement in this context.
3赞
Vivick
11/17/2023
#2
reject
确实使相关承诺被拒绝,但仅此而已。
在第二个示例中,由于您没有返回 promise,因此不会影响生成的 promise。
你从 your 得到的 promise 会立即得到解决,因为它隐式返回 。.then
undefined
.catch
仅适用于已解析的 Promise 对象。它不控制任何关于另一个承诺的任何事情,这个承诺在某个地方被“分离”了。
评论
1赞
David
11/17/2023
#3
在这种情况下,如果没有语句,则永远不会观察到。通过返回此处:return
Promise
Promise
.then(a => {
return f2(a)
})
这允许 promise 处理程序链(对 的任何额外调用,对 的任何调用)观察其结果。如果不返回它,则对 的调用不会被观察到,因为没有或附加到它。.then()
.catch()
Promise
f2()
.then()
.catch()
一个非常常见的实际示例是调用以下结果:.json()
fetch()
fetch(someUrl)
.then(result => {
return result.json();
})
.then(data => {
// do something with data
});
通过返回 from,您可以在整个链中的后续调用中使用它。如果不归还它,就没有什么可跟进的。Promise
result.json()
Promise
.then()
评论