【问题标题】:Async await is blocking other function from running异步等待阻止其他功能运行
【发布时间】:2021-07-16 16:55:48
【问题描述】:

所以我的两个函数位于它们自己的文件中,该应用程序由四个函数组成,它们都是异步等待的,首先它获取信息,然后安装然后压缩信息,最后应该使用 axios 发布。从 server.js 确实执行了每个操作,但在我的 axios 函数中等待 zipFunction() 下没有任何操作,甚至没有 console.log()。请帮忙

代码 AXIOS 文件

const axios = require("axios");
const fs = require('fs');

const path = require('path')
const { pathToFileURL } = require("url");

const zippedFile = require('./archiver')

//Make POST
async function makeAxios(){
  await zippedFile()

  console.log("AXIOS!!!")

  user = "";
  pwd = "";
  ZipPath = path.join(__dirname, '')

  console.log(ZipPath)
  axios({
    
    method: 'POST',
    url: "",
    headers: {
        'content-type': 'application/zip'
    },
    auth: {
        username: user,
        password: pwd
    },
    maxContentLength: Infinity,
    maxBodyLength: Infinity,
    data: fs.createReadStream(ZipPath),
  });


}

module.exports = {makeAxios}

压缩文件

//Modules
const archiver = require("archiver");
const fs = require("fs");

//Locals
const packagedModules = require("./packagedModules");
const { branch } = require("./getRepo");
const path = require("path");
const { resolve } = require("path");

const archive = archiver("zip");

async function makeZip() {
  await packagedModules();
  
  const output = fs.createWriteStream(`${branch}.zip`);
  return new Promise((resolve) => {
    output.on(
      "close",
      function () {
        console.log(archive.pointer() + " total bytes");
        console.log(
          "archiver has been finalized and the output file descriptor has closed."
        );
      },
      archive.pipe(output),
      archive.directory(
        path.join(__dirname, ""),
        false
      ),
      archive.directory("subdir/", "new-subdir"),
      archive.finalize()
    );
  });

}

module.exports = makeZip;

【问题讨论】:

  • 你正在返回一个新的 Promise,但从不调用 resolve。您需要相应地致电resolvereject

标签: javascript node.js


【解决方案1】:

makeZip 返回的 Promise 永远不会被解决或拒绝。

当创建一个新的 Promise 时,你会收到两个参数:resolvereject。 必须调用其中一个参数,否则您的承诺将永远无法完成。

尝试在您的关闭回调函数中调用resolve()

return new Promise((resolve) => {
  output.on('close', function() {
    resolve();
  });
});

阅读更多关于 Promise 的信息:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise#chained_promises

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-09
    相关资源
    最近更新 更多