JavaScript 不会等到 python 执行完成

标签 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
​​​}
}

最佳答案

你应该将回调转换为promise。所以你可以等待 js 线程直到 Promise 被解析/拒绝。

你可以尝试一下。

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
    }
  });
}

关于JavaScript 不会等到 python 执行完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58871017/

相关文章:

Javascript 日期数组,增量填充缺失的日期

javascript - 如何在 Javascript 中的 html 编码中正确使用 .click 选择类型?

javascript - Sequelize Model.increment 返回 [undefined, number] 而不是受影响的行

node.js - 让 ExpressJS 为映射路径返回 404

node.js - npm 找不到模块

jquery - SimpleModal 确认覆盖 : Would like callback to return true or false instead of URL redirect

javascript - react 并使用 ReactDOM.createPortal() - 目标容器不是 DOM 元素错误

javascript - 使用 AngularJS 在 View 上显示来自 MySQL 的 LongBlob 照片

forms - Codeigniter 对空字段进行回调?

ios - iOS 中 navigationController 中的后退按钮回调