0

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

2 回答 2

3

callback您可以在 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 ){
...
}

如果代码需要在所有 url 返回后运行,请使用条件检查这是您的最后一个代码。

这可能对您有用:

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 ){
...
}
于 2012-11-06T15:55:19.943 回答
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.
于 2012-11-06T16:01:32.577 回答