2015-12-11 82 views
2

我很難理解所有不同的博客和例子,關於如何正確使用角度的承諾,所以請向某人澄清一些請求。

正在使用傳遞給服務get方法來設置控制器變量這樣的錯誤的回調?

會議服務:

self.getSessions = function(callback) { 

    $http.get(self.urls.sessionsList).then(
    function (response) { 
     callback(response.data); 
    }, 
    function (response) { 
     // failure 
    } 
); 

}; 

從該控制器:

.controller('SessionsController', ['Session', function(Session) { 
    var self = this; 

    self.sessions = []; 

    Session.getSessions(function(data) { 
    self.sessions = data; 
    }); 
}]) 

回答

2

Q)是使用了傳遞給服務get方法回調設置控制器>>這樣的變數是否錯誤?

不,這是沒有錯的,但是你可以使用電源的承諾,改變你的代碼類似下面,在那裏你可以鏈接到「然後」方法:

self.getSessions = function() { 

     return $http.get(self.urls.sessionsList); 
} 

,改變你的控制器代碼是:

.controller('SessionsController', ['Session', function(Session) { 
    var self = this; 

    self.sessions = []; 

    Session.getSessions().then(function(response) { 
    self.sessions = response.data; 
    }); 
}]); 

然後,你可以看到,調用者可以鏈到「然後」,做越來越多的功能,...

希望有所幫助。

+0

第一個代碼片段是其規範形式的延遲反模式。它必須是'返回$ http.get(self.urls.sessionsList)'一行。 – estus

+0

謝謝奧馬爾。我理解這種差異,但是我的控制器也必須處理$ http錯誤路徑。這不會讓控制器太麻煩嗎?不應該只在控制器中綁定UI代碼? – Dave

0

使用承諾是壞事,因爲es6的承諾被釋放

+0

你是什麼意思?我不明白你想說什麼抱歉。 – Dave

+0

抱歉,我對英語不太好,我想說的是,在一個人推薦使用諾言之前,但自從ecma 6出來後,這不是一件好事。 – NBeydon