【发布时间】:2018-06-25 16:09:14
【问题描述】:
我正在尝试创建一个新的 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 的人,我可选地承诺一些遗留代码,并避免对某些现有用途进行大规模重构情况下,它可以帮助我选择性地解决其他地方的承诺。
【问题讨论】:
-
您的第二个代码块是唯一的方法。如果您描述了您要解决的整体问题,我们可能会提出一种完全不同的方法来解决实际问题,但是对于这种特殊方法,您的第二个代码块是您唯一的选择。在 executor 返回之前,promise 本身是没有定义的,所以直到之后你才能将它分配给某个东西。
-
since it could run before the Promise constructor function- 那是你弄错了 -
@JaromandaX 那么,Promise 构造函数是否总是首先(同步)运行完成?如果是这样,我在对象中存储承诺引用的第二个代码块应该没问题。
-
同步部分会,因为你没有异步发生在那里,你应该没问题
-
@JohnMorris 您想将 _setupPromise 保存在全局范围内,以便您可以从其他地方轻松访问它,对吗?如果是这样,我认为您可以将 _setupPromise 变量转换为承诺本身。
标签: javascript promise es6-promise