我有一个用节点js编写的服务。它的工作是连接到azure存储器,下载一个文件并将其返回为base64。
这是我到目前为止所做的:
` var azure = require('azure-storage');
const fs = require('fs');
var fileService = azure.createFileService('microsoftdata');
var test = await fileService.getFileToStream('sharename', '', filename, fs.createWriteStream(filename), async function (error, result, response) {
if (!error) {
console.log('result ' + JSON.stringify(result, null, 4));
var bitmap = await fs.readFileSync(filename);
return bitmap.toString('base64');
// var str = getFileAsBase64(filename);
// console.log('str - ' + str);
// return str;
// file downloaded
}
else {
console.log('error - ' + JSON.stringify(error, null, 4));
}
});
console.log('test - ' + test);`
现在发生的是:下载文件->在var'test'中返回文件的数据->完成下载,进入回调并将base64返回到无处。
我要实现的是:下载文件->等待完成->完成并输入回调->返回base64以测试他范围内的另一个变量。
谢谢。
答案 0 :(得分:1)
所以这里有两个可能的问题,但是我不是Azure专家,文档尚不明确,所以我只给你们两个。
getFileToStream
是否真的返回了承诺?它没有说在documentation中有,所以我不知道。如果不是,并且您仍然想使用异步/等待,则需要将其包装在new Promise()
中。像这样:var azure = require('azure-storage');
const fs = require('fs');
var fileService = azure.createFileService('microsoftdata');
var test = await new Promise((res, rej) => {
fileService.getFileToStream('sharename', '', filename, fs.createWriteStream(filename), async function (error, result, response) {
if (!error) {
console.log('result ' + JSON.stringify(result, null, 4));
var bitmap = await fs.readFileSync(filename);
res(bitmap.toString('base64'));
// var str = getFileAsBase64(filename);
// console.log('str - ' + str);
// return str;
// file downloaded
}
else {
rej('error - ' + JSON.stringify(error, null, 4));
}
});
})
console.log('test - ' + test);
bitmap.toString('base64)
可能不会设置test
的值。我建议在等待test
之前初始化getFileToStream
,然后在回调函数中设置其值。像这样:var azure = require('azure-storage');
const fs = require('fs');
var fileService = azure.createFileService('microsoftdata');
var test
await fileService.getFileToStream('sharename', '', filename, fs.createWriteStream(filename), async function (error, result, response) {
if (!error) {
console.log('result ' + JSON.stringify(result, null, 4));
var bitmap = await fs.readFileSync(filename);
test = bitmap.toString('base64');
// var str = getFileAsBase64(filename);
// console.log('str - ' + str);
// return str;
// file downloaded
}
else {
console.log('error - ' + JSON.stringify(error, null, 4));
}
});
console.log('test - ' + test);
答案 1 :(得分:1)
尝试创建并兑现承诺
sudo apt install maven