此问题已解决,尽管我还不知道如何解决。我下面的代码部分实际上并不是罪魁祸首,因为在停止抛出错误之前未对其进行更改。据我所知,应该抛出该错误的其他任何东西都没有改变,所以我不确定发生了什么。如果我找出解决问题的方法,我将其发布为答案。现在,我将只剩下这个问题,以防其他人也遇到这个问题。
我正在创建一个使用来自伪造模型查看器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
}
}
还奇怪的是,仅在成功进行一次呼叫后才引发此错误。我用它来获取用户所选项目的属性。第一个选择将正常工作,但是所有随后的选择将引发错误。其他所有东西都可以正常工作,包括依赖于“属性”的代码部分。有谁知道为什么会这样以及我该如何解决?