gpt4 book ai didi

Javascript promise

转载 作者:行者123 更新时间:2023-11-30 15:36:42 25 4
gpt4 key购买 nike

我一直在研究来自不同来源的 Javascript,并且遇到了这段代码:

function waitForUI() {
return new Promise(function (resolve) {
display.getBoundingClientRect();
requestAnimationFrame(function () {
requestAnimationFrame(resolve);
});
});
}

据我了解,可以解决或拒绝 promise 对象,具体取决于哪一个会发生不同的事情。但在这种情况下,promise 只有 resolve,意味着它永远不能被拒绝?然后函数内部有一个子 promise ,也只有 resolve 。如果它总是要通过,那么 promise 的意义何在?

我不完全确定整个功能是如何工作的,所以如果有人能给我提示,我将不胜感激,我已经考虑了一段时间,但没有得到一个好的答案。

干杯

最佳答案

首先关于子 promise 。我想你的意思是:

requestAnimationFrame(function () {
//....
});

这实际上并不是一个真正的 promise ,而是一个(更基本的)回调实现,它会在某事完成时被调用。在这种情况下,下一个绘画周期发生时。不要惊讶 resolve 可以从该回调中调用。没有规则说您不能这样做:resolve 仍在该函数的范围内。

在该回调中再次调用 requestAnimationFrame 的原因是为了确保重绘已经发生,这在您等待 2 个周期时是肯定的。然后调用 resolve

然后关于拒绝 promise 。是的,即使是那个 promise 也可以被拒绝,因为参数是由 promise 内部传递的,如果需要你可以使用它:

  return new Promise(function (resolve, reject) { // added reject
display.getBoundingClientRect();
if (somecondition) { // whatever error condition you might have
reject();
} else {
requestAnimationFrame(function () {
requestAnimationFrame(resolve);
});
}
});

关于Javascript promise ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41427481/

25 4 0
文章推荐: javascript - 如何将选中的复选框数据附加到html
文章推荐: c - 写入动态内存
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com