如何使JavaScript库与多个promise库兼容
How to make a JavaScript library compatible with multiple promise libraries?
我正在编写一个应该能够生成promise的库。但我不想将库的用户绑定到任何特定的promise实现。假设我不会使用任何外来的/特定于实现的功能,那么有没有既定的最佳实践可以做到这一点?
例如,是否有一个最小兼容性库可以检测Q、Bluebird、AngularJS promise、ES6 promise。。。加载了,并为我提供了一个最小的接口,无论它是什么?
注意:我的库需要生成promise,我希望避免在自己的库中捆绑完整的promise库。(除非有一个特别小的,为这个目的制造的?)
由于这个原因-有Promises/A+规范。
Promises/A+是一个仅定义then
方法的promise规范。它描述了不同的promise库如何相互操作——有效地满足您所描述的目的。
你描述的所有这些库——Bluebird、Q和AngularJS的$Q实际上都是A+承诺,都是针对测试套件运行的。
您所描述的最小接口是存在的,它就是then
。或者,如果您需要直接创建自己的promises-您可以从该列表中选择任何一个promises/A+库,并且保证它将在所有其他库中工作-因为它们都是promises/A+,所以它们将正确地吸收promises。它还可以在不同版本的库之间工作(减去bug)。
如果您选择Promises/a+库,例如应用程序中的Bluebird,则用户可以使用任何一致的实现。
这是套房。如果你真的想从头开始创建承诺,你可以要求用户向你的图书馆提供他们的同化方法,例如:
MyLib.init = function init(assimilator){
MyLib.assimilator = assimilator
}
MyLib.apiCall = function(){
// assimilate a returned promise from whatever library you want
return MyLib.assimilator(promiseYouCreateInWhateverLibrary());
}
MyLib.init(Promise.resolve); // Initialize with Blubird, or native promises
MyLib.init(Q); // Initializes with Q
// initialize with any empty promise with any library
MyLib.init(function(x){ return empty.then(function(x){ return x; }); });
相关文章:
- 如何使用jquery在填充自动完成的值后使文本框只读
- JQuery使计数器每次更改时都会增加
- 如何使Javascript动态html表及其上的事件
- 如何使jQuery插件函数可调用以供独立使用,而不在集合上操作
- 与 promise 一起使用时,异步瀑布不执行下一个回调方法
- 如何重写这段代码,使执行不必从Javascript Promise.then()方法开始
- 如何使EXPECT条件等待promise被解析(代码封装在方法中)
- 如何在捕获Promise时使Node单元测试失败
- 如何使包含 promise 的函数返回值而不是 promise
- 学习Javascript/Jquery promise&deferred,当多次使用时出现问题
- 如何使promise数据对象在控制器中可用,并将数据从promise传递给新函数
- 如何使JavaScript库与多个promise库兼容
- 如何正确使用promise,使我的代码;不要这么嵌套
- 如何处理Parse promise错误,使它们不会'不要一直执行代码
- AngularJS:如何使Promise链变平
- 深刻理解:为什么.bind(this)在与new Promise一起使用时似乎不遵循正常的规则?
- 如何修改一个promise的属性,使其与AngularJS中对象的属性相等?
- 如何重构Model.findOne(…)块,使其更具promise (SailsJS 0.9.x)
- 如何使抛出的错误在Promise之外可见
- 如何使这个异步foreach循环与promise一起工作