此扩展程序调用Goo.gl URL缩短程序,然后尝试将其回复添加到一个字符串中(用于电子邮件目的)。但是,由于它是异步的,因此在将缩短的URL加在一起之前,代码会继续运行。如何在继续之前将其添加到字符串中?
for(i;i<length;i++){
getShortURL(tabs[i].url, function(short_url) {
string += encodeURL(short_url);
});
}
//do something with string...
//
function getShortURL(long_url, callback ){
...
}
答案 0 :(得分:3)
在url字符串返回后,您可以在callback
内继续操作。
for(i;i<length;i++){
getShortURL(tabs[i].url, function(short_url) {
string += encodeURL(short_url);
//do something with string...
});
}
//
function getShortURL(long_url, callback ){
...
}
如果代码需要在返回所有网址后运行,请使用条件检查这是您的最后一个代码。
这可能对您有用:
for(var i=0,x=0;i<length;i++){
getShortURL(tabs[i].url, function(short_url) {
string += encodeURL(short_url);
x++;
if (x === length) {
//do something with string...
}
});
}
//
function getShortURL(long_url, callback ){
...
}
答案 1 :(得分:1)
你实际上有两个问题。一个是你的异步方法立即返回,第二个是因为你的调用是异步的,所以不能保证它们会以你发送它们的顺序返回。
你可以这样做:
var strings = [];
for(i;i<length;i++){
getShortURL(tabs[i].url, function(short_url) {
string[i] = encodeURL(short_url);
});
}
// wait until the array is filled (use setTimeout) and then construct the final string from the array.