Angular 角度2时相当于$q

Angular 角度2时相当于$q,angular,ionic2,observable,deferred,Angular,Ionic2,Observable,Deferred,我习惯于使用角度为1的$q。我正在迁移到angular 2 是否有提供.when()方法的等效方法 例如,我需要迁移以下内容: .service('updateProDB', [ '$rootScope', 'connectionStatus', '$q', 'storageService', 'sendToServer', '$ionicPopup',

我习惯于使用角度为1的
$q
。我正在迁移到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 (){

您可以使用以下方法执行等效操作:

Promise.resolve(promise).then
这基本上不区分承诺和价值观

是的,您可以用同样的方法实例化q,但是使用
newpromise()
而不是
$q()


它们应该是等效的

您可以在angular 2中使用
of
Promise
可观察的。您发布的代码没有
.when()
方法。@PankajParkar但它真的等效吗?
.when()
是否将非承诺值包装到承诺中并保持承诺不变?所以当(1)是一个承诺,它返回1)如果你做了(1)的(可观察的)的(可观察的)会发生什么?你得到了一个流-编辑:确认,确实如此,因此它们不是等价的。是的,你是对的@Adam…对不起。我的意思是我需要替换代码中的use$q,但在我的应用程序中的其他地方我使用了$q.when.ok谢谢,如何实例化它
var deferredVar=new Promise()
?是的,您实例化承诺的方式与实例化
$q
的方式相同,因此在您的示例中,与when等效的是̀Promise.resolve(Promise)。然后是`对吗?是的。事实上,的文档显示,
.when
.resolve
的别名。因此,
$q
也有一个
.resolve
做同样的事情。
let promise = new Promise((resolve, reject) => {
    if (/* some async task */) {
       resolve('Success!');
    } else {
        reject('Oops... something went wrong');
    }
});
let promise = $q((resolve, reject) => {
    if (/* some async task */) {
       resolve('Success!');
    } else {
       reject('Oops... something went wrong');
    }
});