Javascript 自定义thenables:我可以使用“自定义”创建自己的对象吗;然后";方法?

Javascript 自定义thenables:我可以使用“自定义”创建自己的对象吗;然后";方法?,javascript,promise,async-await,Javascript,Promise,Async Await,我想知道定制的“thenables”(即带有.then()方法的对象)是否得到批准/记录?它们与真正的承诺相比如何?我想这对你如何实现很重要,所以我想知道是否有一些DOs和DONT文档 建议: 。然后可以返回任意的“thenable”对象,并将其视为承诺 找不到有关此的任何文档 这些承诺与真正的承诺相比如何 因为你不知道它们是否是真正的承诺。看一看 我想知道是否有关于如何实现它们的DOs和DOTS文档(因为这似乎才是最重要的) 有一个(相当简单的)文档记录了如何处理这些数据。ES6承诺(扩展为,

我想知道定制的“thenables”(即带有
.then()
方法的对象)是否得到批准/记录?它们与真正的承诺相比如何?我想这对你如何实现很重要,所以我想知道是否有一些DOs和DONT文档

建议:

。然后可以返回任意的“thenable”对象,并将其视为承诺

找不到有关此的任何文档

这些承诺与真正的承诺相比如何

因为你不知道它们是否是真正的承诺。看一看

我想知道是否有关于如何实现它们的DOs和DOTS文档(因为这似乎才是最重要的)

有一个(相当简单的)文档记录了如何处理这些数据。ES6承诺(扩展为,
等待
)遵循这一点。基本上:

  • 对象有一个名为
    的属性,其值为函数
  • 该函数将通过两次回调被调用
  • 您可以异步或不异步调用它们中的任何一个
  • 第一个调用决定了同化了您的thenable的承诺会发生什么

这真的不是魔法。当您要使用值进行解析时,调用第一个参数;当您要拒绝时,调用第二个参数。不存在假设正确的承诺实现的DONTs-您可以随时调用回调,并让回调保持在您想要的时间内:调用应该被忽略,引用不应该泄漏内存。

我认为如何实现很重要
确实如此-至于文档。。。可能是。然后在“规范”中的描述我将不得不研究该链接,谢谢。我希望能找到一些更全面的例子来说明如何实现您自己的custom-TheEnables。不确定您所说的“approved”是什么意思?即使custom.then-Enable在某些情况下有效,但在其他情况下可能会失败,例如,如果它不是一个“真正的”承诺。这就是为什么我想知道定制thenables是“最佳实践”,还是一个预期功能。我认为创造定制是很有潜力的,而且会有很多人这样做。还有一些特定的模式/反模式。@MikeLewis你认为简单地创造一个“真正的”承诺所没有的潜力是什么?最后一部分似乎有点不可靠。因此,我等待我的自定义thenable,可能是在循环或其他什么中。每秒可能有1000次(我没有一个真正的用例,如果在这里使用,会怎么样),每次都会给我一个新的cb。如果我使用的是一个典型的回调模式(函数数组),那么我将存储1000个回调,每次我的streamy.thenable发出数据时都调用所有回调…?你是说,如果我再次调用那些已经调用的回调,那没关系,应该不会有任何影响。但是,如果有很多这样的人。。。这似乎不是一个好主意。@MikeLewis实际上是循环中的一个
wait
将暂停循环,直到值被解析:-)是的,堆积回调不是一个好主意。当然,做许多无用的操作,把无用的东西留在记忆中,仍然是痛苦的;我想说的是,它不会影响用thenable解决的承诺。那么链锁呢?自定义TheTable的
.then()
方法应返回一个新的TheTable,其中包含
.then()
方法,该方法以某种方式链接到传递给第一个TheTable的函数的返回值。我想?不确定这如何适用于可重复的表(如事件/流)否。
then()
的返回值在被承诺(或
wait
)同化时被丢弃。只有当你想自己使用标签的时候,链接才是重要的——但实际上没有什么好的理由不使用一个合适的承诺。