Node.js 等待回调结果,然后继续节点js
我有一个用NodeJS编写的服务。它的工作是连接到azure存储下载一个文件并将其作为base64返回 以下是我到目前为止所做的:Node.js 等待回调结果,然后继续节点js,node.js,typescript,Node.js,Typescript,我有一个用NodeJS编写的服务。它的工作是连接到azure存储下载一个文件并将其作为base64返回 以下是我到目前为止所做的: ` var azure = require('azure-storage'); const fs = require('fs'); var fileService = azure.createFileService('microsoftdata'); var test = await fileService.getFileToStream('sharename',
` 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返回到别处
我想要实现的是:下载一个文件->等待完成->完成,然后输入callback->返回base64以进行测试,或者返回其范围内的另一个var
谢谢。这里有几个可能的问题,但我不是Azure专家,文档中也不清楚这一点,所以我将两者都告诉你
getFileToStream
是否实际返回承诺?它并没有说它会,所以我不知道。如果没有,并且您仍然希望使用async/await,则需要将其包装在newpromise()
中。大概是这样的:bitmap.toString('base64)
不能设置test
的值。我建议在等待getFileToStream
之前初始化test
,然后在回调函数中设置其值。大概是这样的:所以这里有几个可能的问题,但我不是Azure专家,文档也不清楚这一点,所以我将两者都给你
getFileToStream
是否实际返回承诺?它并没有说它会,所以我不知道。如果没有,并且您仍然希望使用async/await,则需要将其包装在newpromise()
中。大概是这样的:bitmap.toString('base64)
不能设置test
的值。我建议在等待getFileToStream
之前初始化test
,然后在回调函数中设置其值。大概是这样的:试着创造一个承诺并解决它
//基本
函数x(){
var承诺=新承诺(功能(解决、拒绝){
setTimeout(函数(){
决心(“完成!”);
});
});
回报承诺;
}
异步函数y(){
var y=等待x();
控制台日志(“y”,y);
}
y();
//实施
var azure=require('azure-storage');
常数fs=要求('fs');
var fileService=azure.createFileService('microsoftdata');
var测试=新承诺(功能(解决、拒绝){
fileService.getFileToStream('sharename','',文件名,fs.createWriteStream(文件名),异步函数(错误,结果,响应){
如果(!错误){
log('result'+JSON.stringify(result,null,4));
var bitmap=wait fs.readFileSync(文件名);
解析(位图.toString('base64');
}否则{
log('error-'+JSON.stringify(error,null,4));
}
});
});
console.log('test-'+test)代码>尝试创建承诺并解决它
//基本
函数x(){
var承诺=新承诺(功能(解决、拒绝){
setTimeout(函数(){
决心(“完成!”);
});
});
回报承诺;
}
异步函数y(){
var y=等待x();
控制台日志(“y”,y);
}
y();
//实施
var azure=require('azure-storage');
常数fs=要求('fs');
var fileService=azure.createFileService('microsoftdata');
var测试=新承诺(功能(解决、拒绝){
fileService.getFileToStream('sharename','',文件名,fs.createWriteStream(文件名),异步函数(错误,结果,响应){
如果(!错误){
log('result'+JSON.stringify(result,null,4));
var bitmap=wait fs.readFileSync(文件名);
解析(位图.toString('base64');
}否则{
log('error-'+JSON.stringify(error,null,4));
}
});
});
console.log('test-'+test)代码>可能重复的@Bauke你能更具体一点吗?因为我知道这篇文章,但我没能用它解决我的案子可能重复的@Bauke你能更具体一点吗?因为我知道这篇文章,但我没能用它解决我的案子
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);
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);