首页 > 解决方案 > 使用Async await 不等待函数返回

问题描述

    var async = require('asyncawait/async');
    var await = require('asyncawait/await');

异步功能:

      var uploadResponse = async(function() {
        var uploadresult = await (fileUploadFun.reportFileUpload(files,title,name));
        console.log("waiting",uploadresult);  // undefined
        var selection =  db.Sections.create({
          // use uploadresult
        }).then(() => {
          console.log("sections created");
        })
        return 'result';  
      })

      uploadResponse().then(function(result) {
        console.log("upload", result);
        res.redirect("back")
      })

等待功能:

 reportFileUpload: function(uploadFileData, title,reportPath) {
 fs.readdir(reportPath, (err, files) => {
      var filenames = files.map(file => file.replace(file, file.split('.')[0]));
      var fileext = files.map(file => file.replace(file, file.split('.')[1]))

      if (filenames.includes(title)) {
        console.log("file exists already");
        var index = filenames.indexOf(title);
        var ext = fileext[index];
        fs.unlink(filepath + title + '.' + ext, (err) => {
          if (err) throw err;
         uploadFileData.mv(filepath + title + extension, function (err) {
            if (err) {
              console.log("error",err);
              return 'error';
            } else {
              return title;
            }
          });
        });
      } 

      else {
          uploadFileData.mv(filepath + title + extension, function (err) {
          if (err) {
            console.log("error",err);
          } else {
            console.log("uploaded");
            return title;
          }
        });
      }
    })
 },

在异步内部,我需要等待上传文件的结果,然后在从 readdir 返回响应并上传后创建表。但是当我控制台等待返回它打印未定义并且等待不等待返回并执行下面的其他功能

标签: javascriptnode.jspromiseasync-awaitfs

解决方案


推荐阅读