我想从承诺中获取价值,但不知道如何。
我试过这种方式:
function connected(p) {
var url = getURL();
async function getURL() {
var test = "";
let tab = await browser.tabs.query({currentWindow: true, active: true});
tab.then(function(tabb){
test = tabb[0].url.toString()
});
return test;
}
async function getURL() {
var tab = await browser.tabs.query({currentWindow: true, active: true});
return tab[0].url;
}
console.log(url.toString()); // Promise
}
第一个功能被拒绝,第二个功能被填满。
答案 0 :(得分:1)
async
函数返回promise
,因此您只能获得promise
。
var url = getUrl()
url.then((resp) => {console.log(resp)});
答案 1 :(得分:1)
我想从承诺中获取价值,但不知道如何。
从承诺中获取值的唯一方法是在承诺上或在同一函数中使用.then()
,您可以使用await
。
async
函数始终返回一个promise。在函数中,您可以使用await
来等待"等待"获取值的承诺,但函数的返回值不是这种情况。该函数始终返回一个承诺,您始终使用await
或.then()
从承诺中获取值。
因此,您的第二个getURL()
函数会返回一个承诺,即已解析的值是您想要的网址。要获得该值,请在返回的承诺上使用.then()
:
async function getURL() {
var tab = await browser.tabs.query({currentWindow: true, active: true});
return tab[0].url;
}
getURL().then(url => {
console.log(url);
});
或者,在这里使用await
真的没什么大优势,所以你也可以这么做:
function getURL() {
return browser.tabs.query({currentWindow: true, active: true}).then(tab => {
return tab[0].url;
});
}
getURL().then(url => {
console.log(url);
});
您的getURL()
的第一个版本不起作用,因为您的函数在调用.then()
处理程序之前返回,因此您始终只返回""
。
答案 2 :(得分:1)
async
和await
- 这些可以解决承诺并直接为您提供价值。
删除等待和.then
有效。