【发布时间】:2023-03-30 18:32:01
【问题描述】:
我习惯于将 $q 与 angular 1 一起使用。我正在迁移到 angular 2。
是否有提供.when() 方法的等价物?
例如我需要迁移这个:
.service('updateProDB', [
'$rootScope',
'connectionStatus',
'$q',
'storageService',
'sendToServer',
'$ionicPopup',
function ($rootScope, connectionStatus, $q, storageService, sendToServer, $ionicPopup) {
'use strict';
var dbReadyDeferred = $q.defer(),
prodata = [],
prodataFieldNames = [];
this.get = function () {
var debugOptionUseLocalDB = 0,
prodata = [],
serverAttempts = 0;
if (debugOptionUseLocalDB) {
return fallbackToLocalDBfileOrLocalStorageDB();
}
if (connectionStatus.f() === 'online') {
console.log("Fetching DB from the server:");
return getDBfileXHR(dbUrl(), serverAttempts)
.then(function () { // success
console.log('-normal XHR request succeeded.');
return dbReadyDeferred.promise;
})
.catch(function (){
【问题讨论】:
-
您可以在角度 2 中使用
Observable.of或Promise。 -
您发布的代码没有
.when()方法。 -
@PankajParkar 但它真的等效吗?
.when()不是将非承诺值包装到承诺中并保持承诺不变吗? (所以when(when(1))是一个返回 1 的承诺)如果你执行Observable.of(Observable.of(1))会发生什么?你得到一个流 - 编辑:确认,确实如此,因此它们不相等。 -
是的,你是对的@Adam ...对不起。我的意思是我需要替换此代码中的 use $q,但在我的应用程序的其他地方我使用 $q.when。
标签: angular ionic2 observable deferred