如何在 AngularJS 承诺中使用通过回调设计的函数?
How does one use functions designed with callbacks within an AngularJS promise?
如果 Javascript 函数设计有回调,如何将该函数封装在 AngularJS promise 中?
例如,我正在考虑使用以下 Cordova 插件:cordova.plugins.diagnostic(参见 https://www.npmjs.com/package/cordova.plugins.diagnostic)。它的许多功能都设计有回调。因为请求正在使用设备的 OS,函数完成之前可能需要一些时间,所以我正在考虑是否应该在 promise 结构中调用它们。例如,如何转换以下内容:
cordova.plugins.diagnostic.isWifiEnabled(function(enabled){
<do something>
}, function(error){
<do something>
});
或者任何通用回调结构...
masterFunction(function(enabled){
<do something>
}, function(error){
<do something>
});
在 AngularJS 承诺下运作?会是这样吗?
function callMasterFunction() {
var deferred = $q.defer();
masterFunction(function(enabled){
<do something>
deferred.resolve(enabled);
}, function(error){
<do something>
deferred.resolve(error);
});
return deferred.promise;
}
我认为在将 AngularJS 与 Cordova 和 W3C Geolocation API 一起使用时,这也是一个问题。在我看来,我可能不清楚在这些情况下范围是如何管理的。
最终,我可以看到将许多此类调用链接在一起。类似于:
var promise = callMasterFunction1()
.then(function(response) { return callMasterFunction2(); })
.then(function(response) { return callMasterFunction3(); })
...
如有任何帮助,我们将不胜感激。谢谢你的时间。
您可以使用 promise 构造函数从基于回调的 API:
创建一个 promise
function callMasterFunction() {
return $q(function (resolve, reject) {
cordova.plugins.diagnostic.isWifiEnabled(resolve, reject);
});
}
现在callMasterFunction()
returns一个承诺:
callMasterFunction()
.then(function (enabled) {
console.log('Wifi is ' + (enabled ? '' : 'not ') + 'enabled.');
})
.catch(function (error) {
console.error('Something went wrong: ', error);
});
当你想链接它们时,你可以这样做:
var promise = callMasterFunction1()
.then(callMasterFunction2)
.then(callMasterFunction3);
如果 Javascript 函数设计有回调,如何将该函数封装在 AngularJS promise 中?
例如,我正在考虑使用以下 Cordova 插件:cordova.plugins.diagnostic(参见 https://www.npmjs.com/package/cordova.plugins.diagnostic)。它的许多功能都设计有回调。因为请求正在使用设备的 OS,函数完成之前可能需要一些时间,所以我正在考虑是否应该在 promise 结构中调用它们。例如,如何转换以下内容:
cordova.plugins.diagnostic.isWifiEnabled(function(enabled){
<do something>
}, function(error){
<do something>
});
或者任何通用回调结构...
masterFunction(function(enabled){
<do something>
}, function(error){
<do something>
});
在 AngularJS 承诺下运作?会是这样吗?
function callMasterFunction() {
var deferred = $q.defer();
masterFunction(function(enabled){
<do something>
deferred.resolve(enabled);
}, function(error){
<do something>
deferred.resolve(error);
});
return deferred.promise;
}
我认为在将 AngularJS 与 Cordova 和 W3C Geolocation API 一起使用时,这也是一个问题。在我看来,我可能不清楚在这些情况下范围是如何管理的。
最终,我可以看到将许多此类调用链接在一起。类似于:
var promise = callMasterFunction1()
.then(function(response) { return callMasterFunction2(); })
.then(function(response) { return callMasterFunction3(); })
...
如有任何帮助,我们将不胜感激。谢谢你的时间。
您可以使用 promise 构造函数从基于回调的 API:
创建一个 promisefunction callMasterFunction() {
return $q(function (resolve, reject) {
cordova.plugins.diagnostic.isWifiEnabled(resolve, reject);
});
}
现在callMasterFunction()
returns一个承诺:
callMasterFunction()
.then(function (enabled) {
console.log('Wifi is ' + (enabled ? '' : 'not ') + 'enabled.');
})
.catch(function (error) {
console.error('Something went wrong: ', error);
});
当你想链接它们时,你可以这样做:
var promise = callMasterFunction1()
.then(callMasterFunction2)
.then(callMasterFunction3);