调用model.getProperties

时间:2019-06-26 16:08:20

标签: javascript async-await autodesk-forge autodesk-viewer

此问题已解决,尽管我还不知道如何解决。我下面的代码部分实际上并不是罪魁祸首,因为在停止抛出错误之前未对其进行更改。据我所知,应该抛出该错误的其他任何东西都没有改变,所以我不确定发生了什么。如果我找出解决问题的方法,我将其发布为答案。现在,我将只剩下这个问题,以防其他人也遇到这个问题。


我正在创建一个使用来自伪造模型查看器api的网络应用。在我的代码中调用model.getProperties时遇到一个奇怪的错误(其中的模型来自Viewer3D.model),并且我很难确定如何解决它。错误中的堆栈跟踪不会显示我自己的任何代码,仅显示api中的代码,但是通过调试,我已经能够将其隔离到SELECTION_CHANGED_EVENT处理程序中的model.getPropeties调用。

错误如下:

TypeError: t[i].callbackFn.call is not a function
    at D.dispatchEvent (https://developer.api.autodesk.com/modelderivative/v2/viewers/6.*/viewer3D.min.js:19:549356)
    at i (https://developer.api.autodesk.com/modelderivative/v2/viewers/6.*/viewer3D.min.js:19:764740)
    at u.setSelection (https://developer.api.autodesk.com/modelderivative/v2/viewers/6.*/viewer3D.min.js:19:766265)
    at i.handleAction (https://developer.api.autodesk.com/modelderivative/v2/viewers/6.*/viewer3D.min.js:30:240200)
    at i.handleSingleClick (https://developer.api.autodesk.com/modelderivative/v2/viewers/6.*/viewer3D.min.js:30:241136)
    at s.__invokeStack (https://developer.api.autodesk.com/modelderivative/v2/viewers/6.*/viewer3D.min.js:30:229550)
    at s.handleSingleClick (https://developer.api.autodesk.com/modelderivative/v2/viewers/6.*/viewer3D.min.js:30:229926)
    at s.mouseup (https://developer.api.autodesk.com/modelderivative/v2/viewers/6.*/viewer3D.min.js:30:233391)
    at HTMLDocument.e (https://developer.api.autodesk.com/modelderivative/v2/viewers/6.*/viewer3D.min.js:30:233007)

我将对model.getProperties的调用包装在一个promise中,以便可以在我的异步函数中等待它。该函数似乎可以工作并返回正确的值,但它似乎也异步引发错误。我已经将等待的呼叫包装在try catch语句中,但从未捕获到错误。而是在调用“成功”之后但在进行任何其他调用之前引发错误。

我可以从调试器中看到我从函数中获得了期望值,但是仍然抛出错误。


viewer.addEventListener(
            Autodesk.Viewing.SELECTION_CHANGED_EVENT,
            onSelectionChange);

async function onSelectionChange(event){
    var dbIds = event.dbIdArray;
    if (dbIds && dbIds.length > 0) {
        await doSomething(event.model, dbIds[0]);
    }
}

function getElementProperties(model, dbId) {
    return new Promise(function(resolve, reject) {
        model.getProperties(dbId, resolve, reject);
    });
}

async function doSomething(model, dbId) {
    var properties = null;

    try {
        // This call works and properties is changed to the correct object
        properties = await getElementProperties(model, dbId);
    }
    catch(err) {
        // The code doesn't get here. The error isn't caught
        console.log(err);
    }

    // When the debugger moves on to this comparison, but before it is executed, 
    // the console shows the error
    if (properties != null) {
        // properties is not null. It is formatted as I expect it to be
    }
}

还奇怪的是,仅在成功进行一次呼叫后才引发此错误。我用它来获取用户所选项目的属性。第一个选择将正常工作,但是所有随后的选择将引发错误。其他所有东西都可以正常工作,包括依赖于“属性”的代码部分。有谁知道为什么会这样以及我该如何解决?

0 个答案:

没有答案