Node.js 等待回调结果,然后继续节点js

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',

我有一个用NodeJS编写的服务。它的工作是连接到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返回到别处

我想要实现的是:下载一个文件->等待完成->完成,然后输入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);