Javascript 如何在异步函数之前获取其状态';结束了吗?

Javascript 如何在异步函数之前获取其状态';结束了吗?,javascript,node.js,callback,execfile,Javascript,Node.js,Callback,Execfile,我正在使用NodeJsexecFile()启动一个守护进程。我已将回调封装在承诺中,承诺在应用程序的其他部分异步使用它 我理解回调在完成时会发出err/result。因此,当守护进程失败时,承诺会正确地拒绝错误 问题:当守护进程正确启动时,承诺不会解决任何问题,因为回调尚未完成 一旦守护进程停止,就会收到响应,因为这是回调生命周期的结束。但那太晚了 问题:如何跟踪回调的生命周期,让承诺得以解决(回调正在进行) 我是否需要使用节点事件模块来创建事件侦听器 这是模块中的两种方法。第一个很好,但第二个

我正在使用NodeJsexecFile()启动一个守护进程。我已将回调封装在承诺中,承诺在应用程序的其他部分异步使用它

我理解回调在完成时会发出err/result。因此,当守护进程失败时,承诺会正确地拒绝错误

问题:当守护进程正确启动时,承诺不会解决任何问题,因为回调尚未完成

一旦守护进程停止,就会收到响应,因为这是回调生命周期的结束。但那太晚了

问题:如何跟踪回调的生命周期,让承诺得以解决(回调正在进行)

我是否需要使用节点事件模块来创建事件侦听器

这是模块中的两种方法。第一个很好,但第二个是我遇到的问题

const { execFile } = require('child_process');
const path = require('path');
const binaryPath = require('./BinaryPaths')

const mcUtil = path.join(binaryPath, 'multichain-util');
const mcd = path.join(binaryPath, 'multichaind');

module.exports = {
    createChain: (chainName) => {
        return new Promise((resolve, reject) => {
            execFile(mcUtil, ['create', chainName], (err, res) => {
               err ? reject(err) : resolve(res);
            });
        });
    },
    startMultichain: (chainName) => {
        return new Promise((resolve, reject) => {
           execFile(mcd, [chainName, 'daemon'], (err, res) => {
              err ? reject(err.message) : resolve(res);
           });
        });
     },
};

您可以围绕承诺创建一个包装器,以便在代码中同步获取承诺的状态,如下所示:

class StatefulPromise扩展了Promise{
建造商(执行人){
超级((解决、拒绝)=>执行者(
(val)=>{
解析(val)
此._状态='已解决'
},
(错误)=>{
拒绝(错误)
此.\u状态=“已拒绝”
},
))
此._状态='正在处理'
}
获取状态(){
返回此。\u状态
}
}
//创建一个承诺,在3秒后解决
var myStatefulPromise=新的StatefulPromise((解决、拒绝)=>{
setTimeout(()=>resolve(),3000)
})
//每500ms记录一次上述承诺的状态

setInterval(()=>console.log(myStatefulPromise.state),500)
在搜索了更多信息后,我在另一个线程中找到了问题的解决方案。这很简单。我只需要使用spawn()而不是execFile()。这将流化数据,而不是在回调完成后才解析数据

解决方案线程在此:

你能给我们看看你的代码吗?我第一次在这里发布。我使用的二进制文件可以在这里找到@utkarspramodgupta谢谢你的解决方案。对不起,我没有回复。我仍在努力把我的头绕在它周围……还有其他的工作。我猜“执行者”指的是内心的承诺?或者“executor”是指execFile回调吗?您不必担心什么是executor。只需使用StatefulPromise类作为Javascript中的本机Promise类,除了使用
then()
catch()
或其他属性外,还可以使用另一个名为
state
的属性。但如果你好奇,你可以在这里读到更多: