代码之家  ›  专栏  ›  技术社区  ›  BR75

javascript获取值而不是承诺

  •  1
  • BR75  · 技术社区  · 8 年前

    我想从承诺中获得价值,但不知道如何实现。

    我试过这样做:

    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
    }
    

    第一个函数被拒绝,第二个函数已满。

    3 回复  |  直到 8 年前
        1
  •  1
  •   jfriend00    8 年前

    我想从承诺中获得价值,但不知道如何实现。

    从承诺中获得价值的唯一方法是使用 .then() 在promise上或在同一功能内,您可以使用 await .

    async 函数始终返回承诺。在函数中,可以使用 等候 “等待”承诺获取值,但函数的返回值并非如此。函数总是返回一个承诺,您总是使用 等候 .然后() 从承诺中获得价值。

    那么,你的第二个 getURL() 函数返回一个承诺,该承诺的解析值是您想要的url。要获得该值,您可以使用 .然后() 关于退回的承诺:

    async function getURL() {
        var tab = await browser.tabs.query({currentWindow: true, active: true});
        return tab[0].url;
    }
    
    getURL().then(url => {
        console.log(url);
    });
    

    或者,使用 等候 在这里,您还可以:

    function getURL() {
        return browser.tabs.query({currentWindow: true, active: true}).then(tab => {
            return tab[0].url;
        });
    
    }
    
    getURL().then(url => {
        console.log(url);
    });
    

    您的第一个版本 getURL() 由于函数在 .然后() 处理程序被调用,因此您总是返回 "" .

        2
  •  1
  •   zabusa    8 年前

    async 函数返回 promise 所以你只能 许诺 因此 我也是

    var url = getUrl()
    url.then((resp) => {console.log(resp)}); 
    
        3
  •  1
  •   Faizuddin Mohammed    8 年前

    async await -这些承诺会直接给你带来价值。 删除等待和 .then 作品

    推荐文章