graphql解析器return对于nodejs中的异步函数中不可为null的字段,不能返回null



别误会,我被迫使用瀑布,因为我需要执行一个又一个函数。不存在与模式或返回类型相关的问题,只是使用异步瀑布。我所需要的只是从最后一个函数返回,而不是之前。

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
})
}
}

来自graphicql的响应,因为它提前返回。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库以及

最新更新