我想调用REST Api然后执行一些代码。我该怎么做?
我有这个javascript代码:
angular.module('academiaUnitateApp')
.factory('languageService',function($http, entryService){
var service = {};
/**
* Finds and all languages.
*
* @return {{ list of languages }}
*/
service.findAll = function(callback){
$http.get('/api/languages')
.success(callback);
};
/**
* Finds and return all languages which there currently is no translations for.
*
* @param {{ entry object }} e
* @return {{ list of languages }}
*/
service.findAllNotTranslated = function(e, callback){
var noMatch = true,
translations = [],
notTranslated = [],
allLanguages = [];
// Find all languages in the database
service.findAll(function(data){
allLanguages = data;
console.log('allLanguages : ', allLanguages);
});
// Find all translation of the entry
for(var i = 0; i < e.title.length; i++){
translations.push(e.title[i].language);
}
console.log('existing translations : ', translations);
console.log('allLanguages lenght : ', allLanguages.length);
// Find all languages which is not already translated
for(var i = 0; i < allLanguages.length; i++){
console.log('i : ', i);
// Don't add translated languages
for(var x = 0; x < translations.length; x++) {
if(allLanguages[i]._id === translations[x]){
console.log('found : ', translations[x]);
noMatch = false;
}
}
// Add non-translated languages
if(noMatch){
console.log('pushed : ', allLanguages[i]);
notTranslated.push(allLanguages[i]);
}
noMatch = true;
}
console.log('return : ', notTranslated);
return notTranslated;
};
return service;
});
我在我的控制台中收到此输出,告诉我service.findAll
在我的代码运行后完成:
existing translations : [
"5501b9263c725a5005e4e78f",
"552d30aed6708cbc742e5efc"
]
allLanguages lenght : 0
return : []
allLanguages : [
{
Object_id: "5501b9263c725a5005e4e78f"
name: "english"
},
{
Object_id: "552d3098d6708cbc742e5efb"
name: "deutsch"
},
{
Object_id: "552d30aed6708cbc742e5efc"
name: "dansk"
}
]
有没有办法等待结果然后执行其余的代码?
答案 0 :(得分:1)
将所有处理代码移至回调
service.findAll(function(data){
allLanguages = data;
console.log('allLanguages : ', allLanguages);
// PUT THE CODE HERE
});
或重构为您从那里调用的方法。
长期探索承诺的使用。您已在此处有效地将承诺转换为回调
service.findAll = function(callback){
$http.get('/api/languages')
.success(callback);
};
你可以写
service.findAll = function(callback){
return $http.get('/api/languages');
};
然后只需调用您的处理函数;
service.findAll.then(myProcessingFunction);
一般来说,回调处理比使用promises更笨拙。 Nice tutorial here