如何从异步回调中添加字符串?

时间:2012-11-06 15:51:32

标签: javascript asynchronous google-chrome-extension callback

此扩展程序调用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 ){
...
}

2 个答案:

答案 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.