簡體   English   中英

graphql 解析器返回 無法從 nodejs 中的異步 function 為非空字段返回 null

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM