2016-07-20 9 views
0

Ich versuche, ein Versprechen zu verwerfen, wie in der Dokumentation der API des Frameworks Ich verwende (Apollo-Stack) erklärt, aber es ist nicht ein Beispiel zeigen, heißt es nur gerade, dass ich das Versprechen abzulehnen, wenn es einen Fehler gibt, und ich versuche, die lästige YellowBox-Nachricht "Warnung: Mögliche Ablehnung von unangebotenen Versprechen" loszuwerden, wenn ich meine Anwendung ohne Internetverbindung ausprobiere.Mögliche unhandled Versprechen Ablehnung

Meine Methode tatsächlich funktioniert, um es in den Fang geht, und es zeigt die Fehlermeldung, aber ich halte die lästige YellowBox Nachricht bekommen, das ist, was zu beheben Ich versuche.

erste, was ich tat, geht an den Haken, wie erwartet, aber es zeigt eine YellowBox Nachricht Warning: Possible unhandled promise rejection...

return client.query({ query: gql`...`, }).then((data) => { 
    console.log(data); 
    data; 
}).catch((error) => { 
    console.log(error); 
    error; 
}); 

Das Letzte, was ich versucht habe:

var promise = new Promise(function(resolve, reject) { 
    //async call, client.query(..) "returns a promise that should be rejected 
    //if there is an error message..." 
    client.query({ query: gql`...`, }).then(({data}) => { 
    console.log(data); 
    resolve(data); 
    }).catch((error) => { 
    console.log(error); // goes right here, works. 
    reject(error.message); 
    }); 
}); 
//just trying this out 
promise.then((data) => { 
    console.log(data); 
}).catch((error) => { 
    console.log(error); 
}); 

Auch das Hinzufügen des Tags Meteor, weil ich Apollo nicht finden konnte, aber es ist ziemlich dasselbe.

mehr Material Der Versuch, wie in den Antworten und Kommentare vorgeschlagen:

var promise = new Promise(function(resolve, reject) { 
    client.query({ 
    query: gql`...`, 
    }).then(({data}) => { 
    console.log(data); 
    resolve(data); 
    }).catch((error) => { 
    reject(error.message); 
    }); 
}, (error) => { 
    console.log(error); 
}); 

andere:

var callback = { 
    success: function(data) { 
    console.log("SUCCESS"); 
    }, 
    error: function(data) { 
    console.log("ERROR"); 
    } 
}; 

var promise = new Promise(function(resolve, reject) { 
    client.query({ 
    query: gql`...`, 
    }).then(({data}) => { 
    console.log(data); 
    resolve(data); 
    }).catch((error) => { 
    console.log(error); 
    reject(error.message); 
    }); 
    return promise; 
}); 
promise.then(callback.success, callback.error); 

andere:

client.query({ 
    query: gql`...`, 
}).then(({data}) => { 
    console.log(data); 
}, (error) => { 
    console.log(error); 
}); 

ApolloStack: http://docs.apollostack.com/apollo-client/network.html sagt es, dass ein Versprechen zurück das sollte abgelehnt werden, wenn ein Fehler auftritt.

YellowBox erkennt Versprechungen und solche Dinge nicht behandelte und wirft Warnungen.

+0

[.then()] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/then) hat ein zweites Argument, eine Funktion, die Angebote mit Ablehnung –

+0

ja ich habe bereits versucht, eine Funktion dort auch zu übergeben, lassen Sie mich wieder versuchen tho – octohedron

+0

Sie haben es an den falschen Ort hinzugefügt, fügten Sie es als zweites Argument zu 'Promise' Konstruktor nicht' .then() ', sollte wie sein : '.then (() => {},() => {})' Aber es ist egal, wo ist das _ "YellowBox Nachricht" _? in der Dev Tools-Konsole? –

Antwort

0

Gefunden die Problem, der Rahmen arbeitet im Moment daran, eine Lösung wird bald kommen, also gibt es keine richtige Antwort für jetzt.

Ich werde den richtigen Weg kopieren (wie in der Frage gezeigt). Es wird auch von der Dokumentation des offiziellen Frameworks kopiert, die zeigt, wie es gemacht wird, so dass die nächste Person, die mit dem gleichen Problem kommt, wissen wird, dass sie ein paar Tage warten muss, bis sie es behoben haben.

client.query({ query: gql`...`, }).then((data) => { 
    console.log(data); 
}).catch((error) => { 
    console.log(error); 
}); 
+0

Kannst du vielleicht den Fehler verlinken? Bericht? – Bergi

+1

Sicher, https://github.com/apollostack/apollo-client/issues/423 – octohedron

-1

versuchen Fehler in Ablehnung Rückruf statt Fang Rückruf zu handhaben:

var promise = new Promise(function(resolve, reject) { 

    client.query({ query: gql`...`, }).then(({data}) => { 
     console.log(data); 
     resolve(data); 
    }, (error)=>{ 
     console.log(error); // goes right here, works. 
     reject(error.message); 
    }) 
}); 
+0

aktualisierte Frage mit Ihrem Vorschlag, hat nicht funktioniert. – octohedron

+0

Sie setzen den Ablehnungsrückruf an die falsche Stelle, er sollte als zweites Argument an 'client.query ({...}) übergeben werden. Dann()', nicht an 'new Promise()' – MarkoCen

1

Es gibt keinen Grund, ein Versprechen zu erstellen, wenn client.query für Sie tut es ...

// no new Promise here, just make the query 

return client.query({ query: gql`...`, }).then((data) => { 
    console.log(data); 
    data; 
}).catch((error) => { 
    console.log(error); 
    error; 
});