gpt4 book ai didi

javascript - 如何在 JavaScript 中强制等待 REST Api

转载 作者:行者123 更新时间:2023-12-03 10:19:01 25 4
gpt4 key购买 nike

我想调用 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"
}
]


有没有办法等待结果然后执行其余的代码?

最佳答案

将所有处理代码移至回调中

  service.findAll(function(data){
allLanguages = data;
console.log('allLanguages : ', allLanguages);

// PUT THE CODE HERE
});

或者重构为您从那里调用的方法。

从长远来看,探索 Promise 的使用。您已在此处有效地将 promise 转换为回调

service.findAll = function(callback){
$http.get('/api/languages')
.success(callback);
};

你可以改写

  service.findAll = function(callback){
return $http.get('/api/languages');
};

然后调用你的处理函数;

  service.findAll.then(myProcessingFunction);

一般来说,回调处理比使用 Promise 更笨拙。 Nice tutorial here .

关于javascript - 如何在 JavaScript 中强制等待 REST Api,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29728767/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com