基于当前平台创建一个Promise对象

3

我正在使用Apache Cordova,在关于Promise对象的多平台问题上遇到了麻烦。

目前,我必须像这样实例化一个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,而不必重复两次代码?
2个回答

3
如果没有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

3

在您学习JS/Angular时,为什么不使用Angular Promise呢?

我的意思是使用$q,这是一个promise/deferred对象的实现。

请参考 $q文档


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接