基于当前平台创建承诺对象
Create a Promise object based on the current platform
我正在使用Apache Cordova,并且在Promise
对象方面遇到了多平台问题。
目前,我必须实例化这样的承诺:
var promise = new Promise(...) {
//Implementation
}
这很好,但是如果应用程序在 Windows 平台上运行,我必须改用WinJS
。喜欢这个:
var promise = new WinJS.Promise(...) {
//Implementation
}
这将生成以下代码:
var promise;
if (cordova.platformId == "windows") {
promise = new WinJS.Promise(...) {
//Implementation
}
}
else {
promise = new Promise(...) {
//Exactly the same implementation as above
}
}
这里的主要问题是我在每个承诺中复制实现,导致两个完全相同的代码块。因此,它更难维护。
有没有办法根据当前平台实例化正确的Promise
,而不必复制代码两次?
如果Promise
不存在,你可以把它分配给WinJS.Promise
,然后像往常一样使用Promise
。
喜欢:
if (typeof Promise === 'undefined' && cordova.platformId === 'windows') {
Promise = WinJS.Promise; // global assignment
}
// At this point you can use new Promise() as usual
当你在JS/Angular中开发时,你为什么不使用Angular Promise呢?
我的意思是$q,承诺/延迟对象的实现。
有关$q,请参阅文档
相关文章:
- 带有对象/原型的链式承诺(Q延期)
- AngularJS:根据值解析承诺对象
- 对承诺对象的混淆
- 尝试编写承诺时出错:承诺解析器对象不是函数
- 传播承诺并在新对象中扩展
- 是否可以将已解析的承诺分配给对象的属性
- AngularFire $createUser 的承诺不返回包含用户数据的对象
- 如何获取 Ember 组件对象内部承诺成功或错误回调
- 为整个承诺对象呈现承诺值
- 如何检查对象是否为承诺
- 如何在解决承诺后从承诺对象获取值
- 承诺不返回对象
- 基于当前平台创建承诺对象
- 什么是承诺对象
- 将多个Bluebird承诺组合到一个承诺对象中
- 访问返回的承诺对象数组值
- angular承诺对象之间的区别
- 访问承诺对象angular的值
- 为什么这个对象在angular http承诺对象中是$window ?
- 访问jQuery $.从蓝鸟承诺对象中获取URL