не может установить 'имя' из неопределенного при выдаче исключения - PullRequest
0 голосов
/ 19 октября 2018

Я просто пробовал Apache Thrift в nodejs, прежде чем использовать его в моем предстоящем проекте, где я столкнулся с этой ошибкой.

Вот мой demo.thrift файл

namespace js demo

typedef i32 int

enum Operation {
  ADD = 1,
  SUBTRACT = 2,
  MULTIPLY = 3,
  DIVIDE = 4
}

struct Work {
  1: int num1 = 0,
  2: int num2,
  3: Operation op,
  4: optional string comment
}

exception InvalidOperation {
  1: int message,
  2: string trace
}

service Calculator {

  void ping()

  double calculate(1: int logid, 2: Work w) throws (1: InvalidOperation oops),

  oneway void zip()
}

Вотчасть server.js

Я использую регистр коммутатора для определения операции в server.js

// inside thrift.createServer
calculate: (logid, work, result) => {
let answer = null, oops = null;
switch(work.op) {
// Code related to Operation.ADD, Operation.SUBTRACT ...
    default: {
      console.log("ERROR!");
      oops = InvalidOperation();
      oops.message = work.op;
      oops.trace = "Unknown Operation";
   }
}
   result(oops, answer);
}

Когда client.js вызывает сервер с calculate(12345, { num1:1, num2:2, op: 10 })

Вместопри возврате ошибки выдается TypeError: Cannot set property 'name' of undefined in demo_types.js:122

Часть, связанная с InvalidOperation в demo_types.js:

// Work related code
var InvalidOperation = module.exports.InvalidOperation = function(args) {
  Thrift.TException.call(this, "InvalidOperation");
  this.name = "InvalidOperation"; // points to here
  this.message = null;
  this.trace = null;
  if (args) {
    if (args.message !== undefined && args.message !== null) {
      this.message = args.message;
    }
    if (args.trace !== undefined && args.trace !== null) {
      this.trace = args.trace;
    }
  }
};
Thrift.inherits(InvalidOperation, Thrift.TException);
InvalidOperation.prototype.name = 'InvalidOperation';
// InvalidOperation.read & .write

Есть идеи, почему выдается ошибка?

1 Ответ

0 голосов
/ 19 октября 2018

На самом деле я понял, почему эта ошибка выбрасывается.Это простая старая ошибка Javascript.

oops = new InvalidOperation();

Вот и все.

...