#asynchronous #server #setter #node-opcua
#асинхронный #сервер #установщик #узел-opcua
Вопрос:
Я использую как клиент, так и сервер из node-opcua, он отлично работает отдельно для управления ошибками на стороне сервера, когда клиент пытается записать значение, и что-то идет не так. Чтобы улучшить это, я хотел бы иметь асинхронный установщик, как в этом примере:
const wantedValue = namespace.addAnalogDataItem({
componentOf: node,
browseName: `${chamber}${folder}Req`,
nodeId: `s=${chamber}${folder}Req`,
dataType: "Double",
engineeringUnits: settings.unit,
engineeringUnitsRange: settings.range,
value: {
get: () => new Variant({dataType: DataType.Double, value: wrapper.readProgram(chamber, folder)}),
set: async (variant: Variant) => {
const success = await wrapper.writeProgram(chamber, folder, variant.value)
return success ? StatusCodes.Good : StatusCodes.Bad
}
}
})
Этот наивный подход приводит к ошибке ввода:
throw new Error("Cannot find StatusCode " statusCode);
Есть ли лучший способ сделать это?
Ответ №1:
- лямбды get и set спроектированы так, чтобы быть синхронными.
- вам нужно использовать форму обратного вызова с timestamped_get и timestamped_set, чтобы достичь того, что вам нужно.