2015-09-28 31 views
9

Ben fetch ile birlikte/await ES7 async kullanmaya çalışıyorum getirme birlikte çalışmıyor bekliyor. Yakın olduğumu biliyorum ama işe yaramayacağım. Ben olarak kullanmakzaman uyumsuz/

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; 
     } 
    } 
} 

şu:

let bar = new Bar(); 
bar.load().then(function (val) { 
    console.log(val); 
}); 

DEMO

Hep

response is not defined 

Herhangi mesajla catch içine almak Nedense İşte kod önerileri yanlış yapmak ne?

GÜNCELLEME: Yorum önerilen olarak, bu fetch ile ilgili bir sorun olabilir, bu yüzden bir basitleştirilmiş (ES5) versiyonunu denedik: Ben değiştirirseniz, Ancak :(çalışmıyor hala

<!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> 

Ve Sınıf kodu her zaman sıkı bir koddur

var request = new XMLHttpRequest(); 
request.open("GET", url, false); 
request.send(null); 
console.log(request.responseText); 
+2

Sana yanlış getirme kullandığınız düşünüyorum - yanlış ne olduğundan emin değil Yine bu https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API –

+0

olduğunu getirme durumunda. 'Fetch' çağrısına' fakat işe yaramadı: Ben '{ 'get' yöntemi} ekleyerek denedim. Eğer ben bir ES5 sürümüyle yayınını güncelledi + da çalışmıyor hangi getirme ettik CORS sorunu –

+0

Ayrıca görünüyor. bu bir yana, 'finance.yahoo.com/webservice/v1 - Ben bir "getirme ile sorunu" demedim ben herhangi CORS arros –

cevap

11

bir değişken olarak response ilan unuttum ve implictly global variables için atama ile yanına kalmayacak bunun yerine, bir ReferenceError atar

:. getirmesi çalışıyor..

Bunun dışında Response nesneler vücut alınacak bekler ve bir söz döndüren bir .text() yöntemi var, bir XHR'nin gibi responseText özelliği yoktur.

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; 
     } 
    } 
} 
+0

sayesinde görmezden, thats Yani sorudur. İkinci bekleyişin olmasının bir sebebi var mı? Bu olmadan kod da işe yarar çünkü ilk 'bek' zaten getirme vaadini çözmüştür. –

+1

İkinci sözün beklenmesi, içindeki hataların, tekrarlanan sözün reddedilmesi için hemen yayılmamış olan, yakalayıcıya atılacağı anlamına gelir. Yani bir fark değil. Try-catch orada olmasaydı, çözümleri ile ve olmadan tam olarak eşdeğer olmalıdır. – Bergi

+0

Yahoo.com'dan gelen yanıtların CORS'e izin vermemesi ve orijinal kod kodunun bu kodla değiştirilmesiyle çalışmasının neden işe yaramayacağının neden bu kadar işe yaradığını bilmek isterim. –