Tag: 延期

Promise.defer的正确模式是什么?

我正在使用TypeScript和async / await来表示异步工作流。 该工作流程的一部分是呼叫Web工作者,并在回调结果时继续。 在C#中,我创建了一个TaskCompletionSource , await它的Task ,代码中的其他地方会调用SetResult来解析TaskCompletionSource 。 我可以在JavaScript中做同样的事情,通过使用Promise.defer()初始化Deferrer对象, await其Promise和其他地方,在window.onmessage监听器中将调用resolve (或reject )方法让异步工作流继续。 听起来很可爱,但MDN说defer已经过时了。 使用Promise构造函数的提议解决方案使Promise执行工作并调用resolve / reject方法对我不起作用,因为该逻辑可能超出我的范围,我只想在对象上调用resolve或reject on在一个完全不同的词汇范围内,我不能用那个function做到这一点。 有一个向后兼容的帮助器 ,它通过绑定我可以使用的resolve和reject函数来给我这样的对象,而无需查询我的代码的语义。 但这是一种不好的做法吗? 有没有公​​认的,更好的模式? 什么是JavaScript中TaskCompletionSource的惯用等价物?