0
我想調用一個REST Api,然後執行一些代碼。我將如何做到這一點?如何在javascript中強制等待到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"
}
]
I有沒有辦法等待結果,然後做其餘的代碼?
是的,在回調中處理響應,或使用一些承諾庫。 – webduvet