在角度2中相当于$ q.when

Lou*_*uis 3 observable deferred ionic2 angular

我习惯使用$q角度1.我正在迁移到角度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 (){
Run Code Online (Sandbox Code Playgroud)

Ajk*_*k_P 8

你可以做同等的,用:

Promise.resolve(promise).then
Run Code Online (Sandbox Code Playgroud)

这基本上不区分承诺和价值观.

是的,你可以用同样的方式实例化q,但是new Promise()而不是$q()

let promise = Promise((resolve, reject) => {
    if (/* some async task */) {
       resolve('Success!');
    } else {
        reject('Oops... something went wrong');
    }
});
Run Code Online (Sandbox Code Playgroud)

let promise = $q((resolve, reject) => {
    if (/* some async task */) {
       resolve('Success!');
    } else {
       reject('Oops... something went wrong');
    }
});
Run Code Online (Sandbox Code Playgroud)

应该是等价的