CosmosDB 存储过程 - Promise 而不是回调

2024-02-26

是否可以在 CosmosDB (DocumentDB) 存储过程 API 调用中使用 JavaScript Promise 而不是常规回调?一种用法是实现分页。

例如

token = getToken();
doSomething(token);    

//....
function getToken(....) {   

  //...
  collection.queryDocuments(link, query, queryOptions, function(error, documents, responseOptions) {
    return responseOptions.continuation;
  });
}

不起作用,因为令牌在回调中返回,并且执行继续。您能否举例说明如何实现这一点?


Cosmos DB 文档中引用的 ECMAScript 版本支持 async/await 和 Promises。我可以在我的存储过程中使用这两个。

这是一个返回进行参数化文档查询的承诺的函数:

function queryDocumentsAsync(sql, parameters, options) {
    const querySpec = {
        query: sql,
        parameters: parameters
    };

    return new Promise((resolve, reject)=>{
        let isAccepted = __.queryDocuments(__.getSelfLink(), querySpec, options || {}, (err, feed, options) => {
            if(err) reject(err);
            resolve({
                feed: feed,
                options: options
            });
        });
        if(!isAccepted) throw "Query was not accepted.";
    });
}

不过,我发现使用这种方法强制回滚存在一些限制。如果你抛出一个错误,它就会被承诺链吞没并且永远不会出去。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CosmosDB 存储过程 - Promise 而不是回调 的相关文章

随机推荐