[英]graphql resolver return Cannot return null for non-nullable field from asynchronous function in nodejs
不要誤會我的意思,我被迫使用瀑布流,因為我需要一個接一個地執行 function。 沒有與架構或返回類型相關的問題,只是卡在異步瀑布中。 我只需要從最后的 function 之前返回。
const async = require('async')
module.exports = {
logout : ()=>{
return async.waterfall([
callback => {
setTimeout(() => {
let data = 1;
return callback(null, data)
}, 2000);
},
(data, callback) => {
setTimeout(() => {
return callback(null, data+1)
}, 2000);
}
], (err, res)=>{
console.log(res)
return res
})
}
}
來自 graphiql 的響應,因為它提前返回。 並且 console.log 正在工作
{
"errors": [
{
"message": "Cannot return null for non-nullable field RootMutation.logout.",
"locations": [
{
"line": 4,
"column": 3
}
],
"path": [
"logout"
]
}
],
"data": null
}
你能在這里使用 async/await 嗎? 沿着下面的線
async function logout(){ let data = await new Promise((resolve,reject) => {setTimeout(() => { resolve(1)},2000)}); data = await new Promise((resolve,reject) => {setTimeout(() => { resolve(data + 1)},2000)}); return data; } async function foo() { let res = await logout(); alert(res) } foo()
此外,我不熟悉異步庫,但您實際上應該在您的示例中返回async.waterfall()
調用,因為根據文檔返回undefined
。
也許只是
const async = require('async')
module.exports = {
logout : ()=>{
async.waterfall([
callback => {
setTimeout(() => {
let data = 1;
return callback(null, data)
}, 2000);
},
(data, callback) => {
setTimeout(() => {
return callback(null, data+1)
}, 2000);
}
], (err, res)=>{
console.log(res)
return res
})
}
}
如果不是,也許也可以分享您正在使用的 GraphQL 庫
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.