gpt4 book ai didi

javascript - Promise.resolve 和 new Promise(resolve) 是否可以互换

转载 作者:搜寻专家 更新时间:2023-10-31 23:08:41 26 4
gpt4 key购买 nike

我认为 Promise.resolvenew Promise(resolve) 可以互换。

考虑一下:

A.

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

B.

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

如我所料,两者都打印出“HI”。

所以我想如果我不需要“拒绝”任何东西。为了简单起见,我可以只写 RSVP.resolve();

但是考虑这个例子:

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

如何使用 RSVP.resolve(); 来替换?我试过例如:

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

这会打印其他内容而不是“HI”。那么是否可以使用 RSVP.resolve();这里?这两个可以互换吗?

最佳答案

首先也是最重要的

I think Promise.resolve and new Promise(resolve) are interchangeable.

没有。 Promise.resolve 将创建一个已解决的 promise ,而 new Promise(resolve) 将创建一个既未解决也未拒绝的 promise 。


在最后一个例子中,

return setTimeout(function () {
return new RSVP.resolve("HI");
}, 3000);

意味着,您返回的是 setTimeout 函数的结果,而不是 promise 对象。因此,当前的 then 处理程序将返回一个已解决的 promise ,其结果为 setTimeout。这就是为什么您会看到一个奇怪的物体。


在您的特定情况下,您想在解决 promise 之前引入延迟。 Promise.resolve 是不可能的。您在问题中展示的倒数第二个方法是要走的路。

关于javascript - Promise.resolve 和 new Promise(resolve) 是否可以互换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34014414/

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