Return 来自 Graphql 解析的列表
Return list from Graphql resolve
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;
}*/
},
我有一个 graphql 解决方案,我正在 findById 回调中获取用户对象。该特定对象调用 getFriends,它是猫鼬插件(朋友的朋友)的一部分,getFriends 回调中的 console.log 包含终端中的列表,所以我知道 getFriends
return 正在处理正确的数据,但我无法弄清楚如何将值 return 放入我的 React-Native 组件中。在过去的 8 小时里,我已经尝试了所有我能想到的方法,但无法从该函数中得到 returned 的值。
您已经接近了,但是在使用解析器时需要记住以下几点:
您的解析器必须 return 一个与架构中指定的 type/scalar 相匹配的值 或者 将解析为该值的 Promise。
Mongoose 操作 can return a promises,你应该利用它们的这个特性,而不是试图将回调包装在 Promises 中,因为这很容易变得混乱
Return 回调中的语句至少在这种情况下)实际上并没有做任何事情。另一方面,then
中的 Return 语句确定承诺将解决的内容(或链中下一个要调用的承诺)。
我想你的解析器需要看起来像这样:
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)
})
})
})
}
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;
}*/
},
我有一个 graphql 解决方案,我正在 findById 回调中获取用户对象。该特定对象调用 getFriends,它是猫鼬插件(朋友的朋友)的一部分,getFriends 回调中的 console.log 包含终端中的列表,所以我知道 getFriends return 正在处理正确的数据,但我无法弄清楚如何将值 return 放入我的 React-Native 组件中。在过去的 8 小时里,我已经尝试了所有我能想到的方法,但无法从该函数中得到 returned 的值。
您已经接近了,但是在使用解析器时需要记住以下几点:
您的解析器必须 return 一个与架构中指定的 type/scalar 相匹配的值 或者 将解析为该值的 Promise。
Mongoose 操作 can return a promises,你应该利用它们的这个特性,而不是试图将回调包装在 Promises 中,因为这很容易变得混乱
Return 回调中的语句至少在这种情况下)实际上并没有做任何事情。另一方面,
then
中的 Return 语句确定承诺将解决的内容(或链中下一个要调用的承诺)。
我想你的解析器需要看起来像这样:
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)
})
})
})
}