gpt4 book ai didi

javascript - 从 setTimeout 做出 promise 时感到困惑

转载 作者:搜寻专家 更新时间:2023-11-01 05:29:52 32 4
gpt4 key购买 nike

我是 Promise 的新手。我写了两个例子:

第一个是:

new RSVP.Promise(function (resolve, reject) {
setTimeout(function () {
resolve("HI")
}, 3000);
}).then(function (result) {
console.log(result);
});

如我所料,这将在 3 秒后打印出“HI”。这是因为“then”等待它,并且仅在 promise 结算时调用。

第二个是:

new RSVP.Promise(function (resolve, reject) {
resolve();
}).then(function () {
return RSVP.Promise(function (resolve, reject) {
setTimeout(function () {
resolve("HI")
}, 3000);
});
}).then(function (result) {
console.log(result);
});

我以为它也会在 3 秒后打印“HI”。但什么也没发生。我以为第二个“then”会等待第一个“then”的 promise 。

第二个例子有什么问题,如何解决?

最佳答案

tl;dr

您需要使用 new 运算符构建 RSVP promise 。

固定代码

new RSVP.Promise(function (resolve, reject) {
resolve();
}).then(function () {
// Note the `new` in the next line
return new RSVP.Promise(function (resolve, reject) {
setTimeout(function () {
resolve("HI")
}, 3000);
});
}).then(function (result) {
console.log(result);
}).catch(console.error);

在你的例子中,它没有做任何事情,因为 then 处理程序中的 promise 创建失败,因为 new 没有与它一起使用。由于 then 处理程序抛出异常,因此它返回了一个失败的 promise 。这就是下一个 then 处理程序也没有被执行的原因。

当我在附加了 catch 处理程序的情况下执行您的原始代码时,如上所示,出现以下错误。

[TypeError: Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.]

经验法则:在处理 promise 时始终使用 catch 处理程序。

关于javascript - 从 setTimeout 做出 promise 时感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34013880/

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