我正在尝试创建一个新的javascript Promise,并且在函数中我传递给new Promise(func)
我希望能够访问我创建的promise对象以便稍后解决何时发生的事情,而不是比调用函数从promise函数中完成工作。
我试过了:
let promise = new Promise((resolve, reject) => {
this._setupPromise = { promise, resolve, reject };
});
但当然还没有设置“promise”变量,所以this._setupPromise.promise
未定义。
我可以像这样更改它以向新Promise之外的对象添加promise,但它感觉不对,因为它可以在Promise构造函数之前运行:
this._setupPromise = {};
let promise = new Promise((resolve, reject) => {
this._setupPromise.resolve = resolve;
this._setupPromise.reject = reject;
});
this._setupPromise.promise = promise
我的delimma有什么好的解决方案吗?
对于任何想知道为什么我会在Promise构造函数中调用/拒绝Promise之外的人,我可选宣传一些遗留代码,并避免一些现有用途的大量重构在某些情况下,它可以帮助我解决其他地方的承诺。
答案 0 :(得分:1)
将我的评论写入答案(并添加更多解释),因为它实际上是您正在寻找的答案:
你的第二个代码块就是这样做的。 promise变量本身在执行程序返回之前没有值,然后构造函数返回,因此在执行程序和promise构造函数完成之后,您无法将其分配给其他内容。
由于您在执行程序函数中没有任何异步代码,因此事情将按顺序执行,因此这看起来不像是一个问题。
您可能会发现使用Deferred对象(仅将Detailed report >
和resolve
函数的保存封装为shown here)更清晰,更可重用。然后,你可以这样做:
reject
之后,您可以执行以下任何操作:
this._deferred = new Deferred();
如果您描述了您要解决的整体问题,我们可能会提出一种完全不同的方法来解决实际问题。
答案 1 :(得分:0)
jfriend00和Jaramanda X在评论中回答了问题。 我的第二个代码块是在我的情况下执行此操作的正确方法,因为传递给Promise构造函数的函数在Promise构造函数退出之前执行。 这意味着在我的情况下,函数中没有异步代码,之后我可以安全地分配promise参考。