问题描述
我正在尝试在nodejs中执行存储过程。我正在使用cosmosclient,当我尝试执行代码时,却无法获取响应或数据。这是我的代码。
private async executeSprocInternal(sprocName,sprocParams) {
try {
var sprocLink = this.sprocsUrl + '/' + sprocName; //sprocLink:: dbs/testDB/colls/test-container/sprocs/test
var _stdate;
var _partition:any ={} ;
if (conf.partition == true) _partition.partitionKey = 'id';
if (this.showLog == true) _stdate = new Date();
return new Promise((resolve,reject) => {
this.container.scripts.storedProcedure(sprocName).execute(sprocLink,sprocParams,_partition).then((results) =>{
if (this.showLog == true) {
console.log('Completed Proc ',sprocName,' in ',((new Date()).getTime() - _stdate.getTime()),' msec');
}
resolve(results);
})
.catch((error) =>{
console.log("exequeryerror")
reject(error)
})
});
} catch (e) {
console.log(2,e)
return new Promise((resolve,reject) => {
reject(e);
});
}
}
感谢您的帮助。
解决方法
根据API documentation,不应传递sprocLink。
function execute(partitionKey:any,params ?: any [],options ?: RequestOptions)
此外,您还需要传递分区密钥的值。(我想'id'是您的分区密钥。)
我已经尝试过了,它可以正常工作,您可以尝试一下:
async function executeSprocInternal(sprocName,sprocParams) {
try {
var sprocLink = 'dbs/Test/colls/data/sprocs' + '/' + sprocName;//sprocLink:: dbs/testDB/colls/test-container/sprocs/test
var _stdate = new Date();;
var partitionKey = 'fruit';
return new Promise((resolve,reject) => {
container.scripts.storedProcedure(sprocName).execute(partitionKey,sprocParams).then((results) => {
console.log('Completed Proc ',sprocName,' in ',((new Date()).getTime() - _stdate.getTime()),' msec');
resolve(results);
})
.catch((error) => {
console.log("exequeryerror")
reject(error)
})
});
} catch (e) {
console.log(2,e)
return new Promise((resolve,reject) => {
reject(e);
});
}
}
executeSprocInternal("getData","success").then((message) => {console.log(message);})
希望这可以为您提供帮助。
更新
这是我的样品:
如屏幕截图所示,/category
是我的分区密钥路径,fruit
是我的分区密钥值。您只需要将“水果”传递给execute
方法,就像这样:
container.scripts.storedProcedure(sprocName).execute("fruit",sprocParams)