2017-09-04 2 views
0

Ich habe eine graphql Auflösung, dass ich das Benutzerobjekt innerhalb der findById Callback bekommen. Dieses spezifische Objekt ruft getFriends auf, das ein Teil eines Mungo-Plugins ist (Freunde von Freunden) und das console.log in getFriends Callback enthält die Liste im Terminal, also weiß ich, dass getFriends die richtigen Daten zurückgibt, aber ich kann nicht herausfinden, wie um den Wert in meine react-native Komponente zurückzugeben. Ich habe in den letzten 8 Stunden alles ausprobiert, was mir einfällt und kann den Wert nicht aus dieser Funktion herausholen.Rückgabeliste von Graphql Auflösung

+0

Haben Sie versucht Zustand mit? – bennygenel

Antwort

0

Sie sind in der Nähe, aber es gibt ein paar Dinge im Auge zu behalten, wenn sie mit Resolvern arbeiten:

  • Ihr Resolver hat entweder einen Wert zurückgeben, der den Typ/Skalar in angegebenen entspricht Ihrer Schema oder ein Versprechen, das auf diesen Wert auflösen wird.

  • Mongoose Operationen can return a promises, und Sie sollten diese Funktion von ihnen nutzen, anstatt zu versuchen Rückrufe innerhalb Promises, da dies zu wickeln leicht chaotisch

  • Return-Anweisungen innerhalb Rückrufe zumindest in diesem Zusammenhang bekommen) nicht wirklich mach alles. Return Statements innerhalb einer then, auf der anderen Seite, bestimmen, was die Zusage auflösen wird (oder was versprechen, als nächstes in der Kette aufzurufen).

Ich könnte mir vorstellen, Ihr Resolver etwas wie folgt aussehen muss:

resolve (_, {currentId}) => { 
    // calling exec() on the query turns it into a promise 
    return User.findById(currentId).exec() 
    // the value the promise resolves to is accessible in the "then" method 
    .then(user => { 
     // should make sure user is not null here, something like: 
     if (!user) return Promise.reject(new Error('no user found with that id')) 
     // we want the value returned by another async method, getFriends, so 
     // wrap that call in a promise, and return the promise 
     return new Promise((resolve, reject) => { 
     user.getFriends((error, friends) => { 
      if (error) reject(error) 
      resolve(friends) 
     }) 
     }) 
    }) 
}