Javascript Typescript将ActiveX函数包装为承诺调用或异步调用

Javascript Typescript将ActiveX函数包装为承诺调用或异步调用,javascript,angularjs,typescript,activex,Javascript,Angularjs,Typescript,Activex,我正在使用Angular框架和Typescript创建一个intranet web应用程序 该应用程序需要与客户机协同工作,因此我使用ActiveX技术实现了一些COM功能(我们使用Internet Explorer,因此它工作正常) 我有两个功能: openApp—将文件从服务器复制到本地计算机 getInstalledVersion-从文件的本地coy读取版本信息 我想做的是在调用openApp之后,我想调用getInstalledVersion(获取新复制文件的版本信息)。显然,我希望在调

我正在使用Angular框架和Typescript创建一个intranet web应用程序

该应用程序需要与客户机协同工作,因此我使用ActiveX技术实现了一些COM功能(我们使用Internet Explorer,因此它工作正常)

我有两个功能:

openApp—将文件从服务器复制到本地计算机

getInstalledVersion-从文件的本地coy读取版本信息

我想做的是在调用openApp之后,我想调用getInstalledVersion(获取新复制文件的版本信息)。显然,我希望在调用getInstalledVersion之前确保复制过程已完成

这听起来像是在承诺中包装openApp,或者在openApp完成后找到其他方法调用getInstalledVersion

有没有人能为我指明一个方向,告诉我如何才能做到这一点

现行守则如下:

export class AppService implements IAppService {

    private _appServiceClass: any;

    constructor() {
        this._appServiceClass = new ActiveXObject("BeaufortAppStoreClientProcessing.Services.AppServiceJsonWrapper");
    }

    openApp(app: IApp, sourceRootFolder: string, destinationRootFolder: string): void {
        var jsonApp = JSON.stringify(app);
        this._appServiceClass.OpenApp(jsonApp, app.AppType.AppTypeID, sourceRootFolder, destinationRootFolder);

    // Want to call getInstalledVersion here after openApp succeeds.

    }

    getInstalledVersion(app: IApp): string {
        var version: string;
        var appType = app.AppType.AppTypeID;
        switch (appType) {
            case 1:
                var jsonApp = JSON.stringify(app);
                version = this._appServiceClass.GetInstalledVersion(jsonApp).toString();
                break;
            case 2:
                version = "n/a";
                break;
            default:
                version = "Incorrect AppType";
                break;
            }
        return version;
    }
}

OpenApp(1)在调用时是否立即返回,或者(2)是否等待副本完成?如果(1),您必须启用一些回调到 OpenApp,即<代码> OpenApp将在完成时调用(理想情况下,您可能考虑事件,但在JavaScript中处理ActiveX事件有点乱)或者在
setInterval
循环中轮询ActiveX控件上的某些属性,直到成功。它等待复制完成。在这种情况下,我想我可以在之后调用第二个函数。我已经研究过事件,是的,用JavaScript处理COM事件似乎很棘手。我仍然有一种感觉,我可以使用有棱角的承诺,但不确定如何使用。感谢指针。我已经编写了一个脚本,它使得在Javascript中处理COM事件更加简单。OpenApp(1)在调用时立即返回,还是(2)等待复制完成?如果(1),您必须启用一些回调到 OpenApp,即<代码> OpenApp将在完成时调用(理想情况下,您可能考虑事件,但在JavaScript中处理ActiveX事件有点乱)或者在
setInterval
循环中轮询ActiveX控件上的某些属性,直到成功。它等待复制完成。在这种情况下,我想我可以在之后调用第二个函数。我已经研究过事件,是的,用JavaScript处理COM事件似乎很棘手。我仍然有一种感觉,我可以使用有棱角的承诺,但不确定如何使用。感谢您的指针。我已经编写了一个脚本,它使用Javascript处理COM事件变得更加简单。