gpt4 book ai didi

javascript - 传回 Promise 并在其他地方解决它

转载 作者:行者123 更新时间:2023-11-28 17:38:12 28 4
gpt4 key购买 nike

我想用 Promises 替换代码中的一些回调。

我有一个使用 setAnimationFrame 在循环中运行的模型。我想在我的模型中启动一些东西,并在完成时通知我。目前我是这样做的。

doSomething(callback) {
this._doSomething = true
this._doneCallback = callback
}

step() {
...
if (this._doSomething) {
doItEveryStep();
if (success) {
this._doneCallback()
}
}
requestAnimationFrame(step)
}

我想改用 Promise,所以我可以使用 model.doSomething().then( () => ... ) 而不是使用回调

我认为这样做会很好:

doSomething() {
this._doSomething = true
this._successPromise = new Promise()
return this._successPromise
}

step() {
...
if (this._doSomething) {
doItEveryStep();
if (success) {
this._successPromise.resolve()
}
}
requestAnimationFrame(step)
}

但是,显然我不能只创建一个 new Promise() 因为我需要将调用 resolve 的函数传递给 Promise。但我很困惑,因为我不想触发一些异步代码——异步代码已经发生了。我只是希望能够选择触发现有异步循环中开始发生的事情,并告诉我何时完成。

显然我的想法都是错误的。我是否应该尝试将 doSomething 视为 promise ?

最佳答案

您通常会在 Promise 构造函数回调中编写导致实现 Promise 的所有异步代码。

确实你需要它不同,那么你可以做到这一点,但我认为这不是一个理想的模式:保存对resolve<的引用 从 Promise 构造函数中获得的函数:

doSomething() {
this._doSomething = true
return new Promise( (resolve, reject) => {
this.resolve = resolve; // Save the reference
})
// We don't need a reference to this._successPromise
}

step() {
...
if (this._doSomething) {
doItEveryStep();
if (success) {
this.resolve() // We have the reference
}
}
requestAnimationFrame(step)
}

关于javascript - 传回 Promise 并在其他地方解决它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48590223/

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