2015-12-06 18 views
5

Jestem nieco zdezorientowany, jak prawidłowo korzystać z pobierania. Wydaje się, że rozwiązuje się nawet wtedy, gdy otrzymam status błędu. Czy poniższy kod jest poprawny (zawijanie pobrania w innej obietnicy)?Odrzucanie obietnicy przy użyciu pobierania

function a(url, config) { 
 
    if (!config) 
 
    config = {}; 
 

 
    config = Object.assign(config, { 
 
    headers: { 
 
     'content-type': 'application/json;charset=utf-8' 
 
    } 
 
    }) 
 
    return new Promise(
 
    function(resolve, reject) { 
 
     fetch(url, config).then(
 
     function(res) { 
 
      if (res.status == 200 && res.ok) { 
 
      console.log("Promise resolved") 
 
      resolve(res); 
 
      return; 
 
      } 
 
      console.log("Promise rejected") 
 
      reject(res); 
 
     }, 
 
     function(rej) { 
 
      console.log("promise rejected") 
 
      reject(rej); 
 
     } 
 
    ) 
 
    } 
 
) 
 
} 
 

 
function b() { 
 
    a('/test').then(
 
    function(res) { 
 
     console.log('success'); 
 
     console.log(res) 
 
    }, 
 
    function(rej) { 
 
     console.log('Rejected'); 
 
     console.log(rej) 
 
    } 
 
) 
 
} 
 

 
b();
(Powyższy kod powinien działać dobrze w chromie pośrednictwem konsoli ... po prostu skopiuj/wklej)

+1

jeśli 'fetch' jest sprowadzić że istnieje we wszystkich nowoczesnych przeglądarkach, to, jak jasno wiedzieć, powroty obietnica. Więc nie ma potrzeby pakowania go w obietnicę, tylko myli rzeczy –

+0

Właściwie ... rozwiązuje się nawet przy statusie błędu jak 400. Dlatego jeśli chcę, aby wywołany wiedział, że ma kod błędu ... Muszę zawinąć i odrzuć, jeśli nie jest ok/200. Chociaż ... w tej chwili ... powyższy kod działa zgodnie z oczekiwaniami (b uruchamia odrzucenie) ... Sprawdzam mój kod, aby spróbować przepisać powyższe, aby je dopasować. Tak czy inaczej, powyższe było tylko przykładem, a przydanie było tym, czego mogłem użyć, aby stworzyć obietnicę łatwą do wykazania. – Goblinlord

+1

Wygląda dobrze, z tym kodem dostajesz "Obietnica odrzucona", "Odrzucona". Zgodnie z oczekiwaniami. Nie jest jasne, na czym polega problem. – dfsq

Odpowiedz

2

Jeśli chcesz odrzucić od sukcesu zwrotnego trzeba to zrobić jawnie albo przez powrocie odrzucona obietnica, np return Promise.reject('error occurred'); lub przez rzucanie.

Dodatkowo, nie należy nadużywać Promise konstruktora w twoim przypadku od fetch już zwraca obiekt obietnicy

function a(url, config) { 
    if (!config) 
     config = {}; 

    config = Object.assign(config, { 
     headers: { 
      'content-type': 'application/json;charset=utf-8' 
     } 
    }); 

    return fetch(url, config).then(
     function(res) { 
      if (res.status == 200 && res.ok) { 
       console.log("Promise resolved") 
       return res.json(); 
      } 
      console.log("Promise rejected"); 
      throw 'promise rejected'; 
     }, 
     function(rej) { 
      console.log("promise rejected"); 
      throw 'promise rejected'; 
     } 
    ); 
} 
+0

Nie mogę usunąć pytania, ponieważ kod działa zgodnie z oczekiwaniami = /. Dziękuję za sugestie dotyczące rzutów zamiast tego, co robiłem. – Goblinlord

Powiązane problemy