gpt4 book ai didi

node.js - GraphQL 发送了正确的数据,但变量未定义

转载 作者:太空宇宙 更新时间:2023-11-03 23:55:12 25 4
gpt4 key购买 nike

希望我没有忽略这里的一些愚蠢的事情,但这就是问题所在。

我正在使用 Promise 获取此 Smartsheet 数据:

var getWorkspaces = async function(args) {
var smartsheet = client.createClient({ accessToken: "key" });

await smartsheet.workspaces.listWorkspaces()
.then(async function(workspaceList) {
var data = await workspaceList.data;
console.log("returning");
console.log(data);
return data;
})
.catch(function(error) {
console.log(error);
});
}

这是我的解析器:

var resolvers = {
Query: {
workspaces: async () => {
var workspaceData = await getWorkspaces();
console.log("sending");
console.log(workspaceData);
return workspaceData;
}
}
};

为什么这是控制台输出:

returning
[
{
id: 000,
name: 'nname',
accessLevel: 'ADMIN',
permalink: 'link'
},
{
id: 000,
name: 'name',
accessLevel: 'ADMIN',
permalink: 'link'
},
{
id: 000,
name: 'name',
accessLevel: 'ADMIN',
permalink: 'link'
}
]
sending
undefined

更具体地说,为什么 workspaceList 未定义?我已经研究了几个小时但找不到解决方案。

最佳答案

这里的问题是您的返回workspaceData位于.then()的回调函数中,因此您在回调中返回,而不是在getWorkspaces()函数中返回。当您说 .next() 时,请求会异步发生。当您使用 await 时,当前线程等待响应并执行它,而不需要回调——同步调用。 await 隐式调用 .next(),添加 try/catch 等价于 .catch()

var getWorkspaces = async function(args) {
try {
var smartsheet = client.createClient({ accessToken: "key" });

var workspaceList = await smartsheet.workspaces.listWorkspaces();
var data = workspaceList.data;
console.log("returning");
return data;
} catch (err) {
console.log(err);
}
}

关于node.js - GraphQL 发送了正确的数据,但变量未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57565933/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com