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