我的代码有很多问题,因为它不是同步的。这是我在 chrome 扩展中遇到的问题示例。这是我的功能
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
那里有什么问题吗?