JavaScript不会等到python执行完成

时间:2019-11-15 05:47:05

标签: javascript node.js callback async-await

我已经安装了python shell npm并使用它从node.js调用python脚本。在python脚本执行结束时,会将json文件写入本地系统。

问题是我的javascript没有等待python执行完成并试图读取尚未写入的文件。所以我没有得到预期的结果或得到错误。任何帮助将不胜感激。谢谢!

这是我的代码:

import * as filePaths from './filePaths';
import * as scriptParameters from './pythonScriptParameters';
import * as constantmessages from './constantMessages';
import * as logger from '../Utilities/logger';
import fs from 'fs';
​
const { PythonShell } = require('python-shell');
​
export async function runManufacturingTest(){
​

PythonShell.run(scriptParameters.scriptFileName, scriptParameters.options, function(err, results) {
    if (err) {
          logger.error(err, '[ config - runManufacturingTest() ]');
      }
      const provisioningresultjson = fs.readFileSync(filePaths.provisioningresults);
      const parsedResult = JSON.parse(provisioningresultjson);
      \\ Rest of the code
​​​}
}

1 个答案:

答案 0 :(得分:1)

您应该将回调转换为Promise。因此,您可以等待js线程,直到承诺被解决/被拒绝为止。

您可以尝试一下。

export async function runManufacturingTest() {
  const { success, err = '', results } = await new Promise((resolve, reject) => {
    PythonShell.run(scriptParameters.scriptFileName, scriptParameters.options, function(
      err,
      results
    ) {
      if (err) {
        logger.error(err, '[ config - runManufacturingTest() ]');
        reject({ success: false, err });
      }
      resolve({ success: true, results });
    });

    if (success) {
      const provisioningresultjson = fs.readFileSync(filePaths.provisioningresults);
      const parsedResult = JSON.parse(provisioningresultjson);
      // rest of your Code
    }
  });
}