[英]Azure Cosmos db and functions javascript sdk - how to read document async?
我在阿波罗解析器中有以下代码:
Mutation: {
addChannel: (root, args) => {
client.readDocument("website", {}, (x) => {
return { id: "Test", name: "Test Channel " + args.name }
});
},
客户是文档客户:
var DocumentClient = require('documentdb').DocumentClient;
调用它时,我想等待client.readDocument完成并给我返回的返回值(上面的示例非常简单,不会这样做)
我的问题是readDocument在后台异步执行某项操作,但该函数未同步,因此我无法等待,因此该函数在回调有机会完成之前立即掉线。 发送返回数据(未定义)后,将发生回调函数(x)=> {...}。
我在这里可以想到的三种解决方案(要使用哪种解决方案取决于您的实际情况):
context.done(result)
的context.done(result)
。 我建议您转向Java API的v2版本: https : //github.com/Azure/azure-cosmos-js
这样,您可以使用流畅的items
路径,并使用const { body: readDoc } = await item.read();
读取异步项目。
您的代码的性质与readDocument
遵循的回调模型不匹配,因此您没有机制将文档从addChannel
传递回。
假设您不需要事先对文档进行任何预处理,则可以结合使用promises和async
/ await
语法,例如
addChannel: (root, arg) =>
new Promise((resolve, reject) =>
client.readDocument("website", {}, (err, x) =>
err ? reject(err) : resolve(x)
)
);
}
然后在执行其他代码之前先“等待”文档
const doc = await obj.addChannel(...);
// use doc
注意- await
只能在标记为async
的函数中使用
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.