2017-09-04 9 views
0
fetchFriends: { 
    type: new GraphQLList(UserType), 
    args: { 
    currentId: { type: new GraphQLNonNull(GraphQLID) } 
    }, 
    resolve: (_, {currentId}) => { 
    return Promise.resolve() 
     .then(() => { 
     User.findById(currentId, (err, users) => { 
      users.getFriends((err, user) => { 
      console.log(user); 
      return user; 
      }); 
     }); 
     }) 

    } 
    /* another version what i tried that returns only the initial findById user 
    resolve: (_, {currentId}) => { 
    var value = User.findById(currentId, (err, user) => { 
     new Promise((resolve, reject) => { 
     user.getFriends((err, user) => { 
      console.log('fetch: ', user); 
      err ? reject(err) : resolve(user) 
     }); 
     }) 
    }) 
    return value; 
    }*/ 
}, 

私は、findByIdコールバック内でUserオブジェクトを取得していると私はgraphql解決しました。その特定のオブジェクトは、mongooseプラグイン(friends-of-friends)の一部であるgetFriendsを呼び出し、getFriendsコールバック内のconsole.logは端末のリストを含んでいますので、getFriendsを知っています は適切なデータを返していますが、その値を自分のReact-Native Componentに返します。私は過去8時間、私が考えることができ、この機能から返された価値を得ることができないすべてを試みました。Graphqlから返されるリスト

+0

を? – bennygenel

答えて

0

あなたは近いですが、物事のカップルがリゾルバで作業する際に留意すべきあります:

  • あなたのリゾルバは、あなたの中で指定された型/スカラーと一致するいずれか値を返すことがありますスキーマまたは aその値に解決されるプロミス。

  • マングース操作can return a promises、そしてあなたは、実際にはない)、むしろ簡単にこの文脈では、少なくともコールバック内の乱雑

  • リターン文を取得することができ、このように約束の内側にコールバックをラップしようとするよりも、彼らのこの機能を利用するべき何でもする。一方、then内の返信文は、約束が解決するもの(またはチェーン内で次に呼び出される約束)を決定します。

私はあなたのリゾルバはこのような何かを見する必要が想像:あなたが状態を使用してみました

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) 
     }) 
     }) 
    }) 
} 
関連する問題