互聯網上有很多關於這個主題的話題。但我仍然陷入困境。 由於所有的信息,我不能再看到在森林裏的三分之一(荷蘭語說)
希望得到一些這樣的幫助。如果這是重複的,我真的很抱歉! 我主要是C#開發人員,但想學習一些Web框架。我開始了@ AngularJS。這是我第一個更大的項目。所以我仍然是一個新手,當談到AngularJS
我正在做一種DAL(是的C#)。我爲此使用了一項服務。我的目的是爲我的控制器封裝其他呼叫!
angular.module("adminApp").service("adminRestDAL", function ($resource, $q) {
var userData;
this.getUsers = function() {
if (!userData)
userData = $resource("/admin/users").query();
return userData;
};
所以這裏是我的功能,讓我所有的用戶。我使用'緩存',我沒有重新加載所有用戶。在我的應用程序中不需要。因此它更平滑! (少於等待)
現在我的問題是我想加載我所有的答案。我在用戶名的幫助下將用戶名添加到我的答案中。我想使用我的本地列表(緩存一個)...
this.getAnswers = function() {
//Always update answers!
//No need for manuel caching (no global variable)
//Make sure we have our users loaded!
//This is exactly why I <3 C#
//I could reuse my existing function (getUsers) and just put 'await' before it...
this.getUsers();
var answersData = $resource("/admin/answers").query(function (data) {
data.forEach(function (answer) {
answer.name = userData.find(function (u) {
return u._id === answer.userid;
}).name;
});
});
return answersData;
};
查看評論。我必須等到用戶加載才能繼續。在80%的情況下,這個功能起作用。用戶在答案之前完成,然後沒有問題。但當它不是,userData是未定義的,我的答案將沒有用戶名...
我試了很多。這是我的最終解決方案(不起作用)。我做了一個單獨的函數,返回查詢的承諾
function getUsersAsync() {
if (!userData)
return $resource("/admin/users").query().$promise
.then(
function (success) {
userData = success;
})
};
this.getAnswers = function() {
//Always update answers!
//No need for manuel caching (no global variable)
//Make sure we have our users loaded!
//This is exactly why I <3 C#
//I could reuse my existing function (getUsers) and just put 'await' before it...
//this.getUsers();
getUsersAsync().then(
function()
{
var answersData = $resource("/admin/answers").query(function (data) {
data.forEach(function (answer) {
answer.name = userData.find(function (u) {
return u._id === answer.userid;
}).name;
});
});
return answersData;
}
)
};
這裏'代碼'等待,直到我的用戶加載。但我無法返回我的數據(答案)了!返回現在是另一個功能比我的getAnswers()函數...
所以我不知道如何解決這個問題在AngularJS。我搜查了很多,發現了一些有用的博客。但仍然卡住。我還發現,ES7是隨着等待和異步關鍵字...
如果你有提示,以解決這個問題,或使其更好。你真的會幫助我!
如果我的'架構'出了問題,請告訴我,就像我第一次在AngularJS上說的那樣。我想學:)
真誠,ErazerBrecht
現在沒有。我閱讀它並在我的項目中有一些地方可以使用它!謝啦! – ErazerBrecht