<分区>
我创建了这个小助手来在 Promise 的构造函数之外公开 resolve
和 reject
export function createPromise() {
let resolve,reject;
let promise = new Promise((r,j) => {
resolve = r;
reject = j;
});
Object.assign(promise,{resolve,reject});
return promise;
}
因为有时将整个脚本包装在
中真的很尴尬new Promise((resolve,reject) => {
// hundreds of lines of code, most which have nothing
// to do with this Promise but I need the Promise object
// at the top level somewhere so that I can expose it,
// but it won't be resolved until some deeply nested construct is hit
})
或者举个更具体的例子:
let p1 = kb.createPromise();
let p2 = kb.createPromise();
Promise.all([p1,p2]).then(() => {
$('#calendar-bookings').scrollIntoView({
duration: 200,
direction: 'y'
});
});
$('#bookings-table')
.dataTable(getOptions(dtSourceUrl, {date, driverOptions}))
.one('draw.dt', () => p1.resolve());
ReactDOM.render(<VehicleTimeline start={dateMom.toDate()} onLoad={() => p2.resolve()}/>, document.getElementById('vehicle-timeline'));
这样我也不必担心 [我的观点是正确的,resolve()
在我什至有机会绑定(bind)我的 .then
之前是否被同步调用。 .then
会立即触发]我认为这很清楚:创建两个 promise,绑定(bind) .then
和 只有在之后,他们才可能得到解决。
当然,这将允许您将 Promise 传递给的任何人来解决它(即将控制权从 Promise 创建者和消费者手中夺走)但是如果消费者提前解雇它,那是他们的损失,因为大概他们是对事件感兴趣的人,不是吗?
此外,这将使消费者能够 reject() Promise,他们可以将其滥用为一种 Promise 取消。我并不是说这是个好主意,但我认为额外的自由也不一定是坏事。
还有什么我想念的吗?我的 createPromise
方法有什么问题吗?