2016-01-22 38 views
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,而不必重复代码两次?

回答

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开发/角,你为什么不使用角承诺?

我的意思是$ q,promise/deferred对象的实现。

请参阅Doc for $q