Promise.resolve和new Promise(resolve)是可以互换的
我认为Promise.resolve
和new Promise(resolve)
是可以互换的。
考虑一下:
一个。
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); });
这打印别的东西,而不是“嗨”。 那么可以使用RSVP.resolve(); 这里? 这两个是可以互换的吗?
首先和最重要的
我认为Promise.resolve和新的Promise(resolve)是可以互换的。
不。 Promise.resolve
将创build一个已经解决的承诺,而new Promise(resolve)
创build一个既不解决也不拒绝的承诺。
在最后一个例子中,
return setTimeout(function () { return new RSVP.resolve("HI"); }, 3000);
意味着你正在返回setTimeout
函数的结果,而不是一个promise对象。 所以,当前的处理程序将返回一个解决的承诺与setTimeout
的结果。 这就是为什么你看到一个奇怪的对象。
在你的具体情况下,你想在解决承诺之前引入延迟。 Promise.resolve
是不可能的。 你在问题中显示的倒数第二个方法是要走的路。