如何从获取中获取响应值而不是没有价值的承诺?

时间:2019-04-25 19:49:58

标签: javascript google-chrome-extension promise maps fetch

我正在构建一个chrome扩展程序,以从页面中提取数据以从数据中构建一个url,我希望将该url缩短为最终产品。在我的内容脚本文件中,我调出一个URL缩短器来压缩链接。我不断得到一个没有价值的承诺,崩溃会做出反应。在devtools中,我看到标注已成功完成,并且返回了URL。

我尝试了异步等待,这是一个完整的异步功能,尝试强制使用response.toString()

这是代码的相关部分。

var listingInfo = new Map();    
listingInfo.set('Address', 'some standard address');    
var tinyLink = '(http://tinyurl.com)/api-create.php?url='; //() because I can't share shortener urls on this site.

/*-----------------------------------GET LINKS--------------------------*/

if(listingInfo.has('Address')){   var mapsLink = \`https://www.google.com/maps/place/${listingInfo.get('Address').replace(new RegExp(" ", "g"), '+')}\`;

  tinyLink = \`${tinyLink}${mapsLink} `;

  var dirLink = fetch(tinyLink, {
    method: "GET", 
    mode: "no-cors", 
    headers: {"Content-Type": "text/html"}   }).then((response)=>{
    return response;   });

  listingInfo.set('dirLink', dirLink); }

我希望收到纯文本字符串,因为在devtools的网络标签中,它显示的是简单的字符串url,而不显示任何JSON,但是我始终收到value=""的已解决承诺。

1 个答案:

答案 0 :(得分:0)

// made this function to use XMLHttpRequest()
const setLink = (propName, url) => {
var xhr = new XMLHttpRequest();
xhr.open("GET", url, true);
xhr.onreadystatechange = function() {
if (xhr.readyState == 4) {

var link = xhr.responseText;
console.log(`link: '${link}'`);
listingInfo.set(propName, link);
}
}
xhr.send();
}

// Then called setLink()
if(listingInfo.has('Address')){
var mapsLink = 
`https://www.google.com/maps/place/${listingInfo.get('Address').replace(new 
RegExp(" ", "g"), '+')}`;

dirLink = `${tinyLink}${mapsLink}`;

console.log(dirLink);

setLink('dirLink', dirLink);
console.log(dirLink);


}