У меня в моем коде много проблем, потому что это не синхронно. Вот пример проблемы, которая у меня есть в расширении chrome. Это моя функцияJavascript синхронные функции - расширение хром
function getTranslation(a_data, callback)
{
var apiKey = '####'
var json_object = {};
var url = '###';
var xmlhttp;
var json_parsed = {};
storage.get('data', function(items)
{
json_object = {
'text': a_data,
'from' : items.data.from,
'to' : items.data.to
};
var json_data = JSON.stringify(json_object);
if (window.XMLHttpRequest)
{
xmlhttp=new XMLHttpRequest();
}
else
{
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.open("POST", url, false);
xmlhttp.setRequestHeader("Content-type","application/json");
xmlhttp.setRequestHeader("Authorization","##apiKey=" + apiKey);
xmlhttp.setRequestHeader("X-Requested-With","XMLHttpRequest");
xmlhttp.send(json_data);
json_parsed = JSON.parse(xmlhttp.responseText);
callback(json_parsed.translation);
});
}
Это, как я использую функцию getTranslation в другой функции:
for (counter in toTranslateArray)
{
getTranslation(toTranslateArray[counter],function(callback)
{
translated += callback;
console.log(translated); //this is second and works
});
}
console.log(translated); //this is first and empty
//code depending on translated
Является ли это что-то плохое?
Задайте функцию json_data внутри функции обратного вызова. – apsillers
Хорошо, но это всего лишь часть функции и не решила мою проблему. После этого у меня есть запрос ajax, который использует json_data. И я получу json_data undefined. – smotru
Поместите любой код, который должен использовать 'json_data' внутри обратного вызова, или внутри функции, которая вызывается в обратном вызове и принимает' json_data' в качестве аргумента. Если вы поместите свой вызов Ajax внутри обратного вызова, он получит доступ к 'json_data'. – apsillers