Javascript graphql解析器返回无法从nodejs中的异步函数为不可为null的字段返回null

Javascript graphql解析器返回无法从nodejs中的异步函数为不可为null的字段返回null,javascript,node.js,express,graphql,async.js,Javascript,Node.js,Express,Graphql,Async.js,别误会,我被迫使用瀑布,因为我需要一个接一个地执行一个函数。没有任何与模式或返回类型相关的问题,只是与异步瀑布有关。我所需要的只是从最终函数返回,而不是之前 const async = require('async') module.exports = { logout : ()=>{ return async.waterfall([ callback => { setTimeout(() => {

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

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/Wait吗?沿着下面的路线

异步函数注销(){
让数据=等待新承诺((解析,拒绝)=>{setTimeout(()=>{resolve(1)},2000)});
数据=等待新承诺((解析,拒绝)=>{setTimeout(()=>{resolve(data+1)},2000)});
返回数据;
}
异步函数foo(){
let res=等待注销();
警报(res)
}
foo()