async/await不能与fetch结合使用

Jea*_*eri 14 javascript async-await fetch-api ecmascript-next

我试图用ES7 async/ await一起fetch.我知道我很接近,但我无法让它发挥作用.这是代码:

class Bar {
    async load() {
        let url =  'https://finance.yahoo.com/webservice/v1/symbols/goog/quote?format=json';
        try {
            response = await fetch(url);
            return response.responseText;
        } catch (e) {
            return e.message;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我使用如下:

let bar = new Bar();
bar.load().then(function (val) {
    console.log(val);
});
Run Code Online (Sandbox Code Playgroud)

DEMO

出于某种原因,我总是深入catch了解消息

response is not defined
Run Code Online (Sandbox Code Playgroud)

有什么建议我做错了吗?

更新:正如评论中所建议的,它可能是一个问题fetch,所以我尝试了一个简化的(ES5)版本:

<!doctype html>

<html>
    <head>      
        <script>
            var url =  'https://finance.yahoo.com/webservice/v1/symbols/goog/quote?format=json';
            fetch(url, {method: 'get', mode: 'cors'}).then(function (response) {
                       console.log(response.responseText);
               });
        </script>
    <head>

   <body></body>
<html>
Run Code Online (Sandbox Code Playgroud)

仍然不起作用:(但是,如果我替换fetch它的工作原理:

var request = new XMLHttpRequest();
request.open("GET", url, false);
request.send(null);
console.log(request.responseText);
Run Code Online (Sandbox Code Playgroud)

Ber*_*rgi 14

你忘了声明response为变量.类代码始终是严格的代码,并且您不会因为分配给隐含的全局变量而逃脱.相反,它抛出一个ReferenceError.

除此之外,Response对象没有responseText像XHR 这样的属性,它们有一个.text()等待接收主体并返回一个promise的方法.

class Bar {
    async load() {
        let url =  'https://finance.yahoo.com/webservice/v1/symbols/goog/quote?format=json';
        try {
            let response = await fetch(url);
//          ^^^^
            return await response.text();
//                                ^^^^^^
        } catch (e) {
            return e.message;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)