从Typescript异步await方法返回一个类型化的let值?

时间:2017-07-15 20:46:38

标签: typescript asynchronous async-await

我的主文件中有以下代码用于命令行应用程序:

dat <- data.frame(A = letters[1:5], X = 21:25)
table(dat$A, dat$X)

    21 22 23 24 25
  a  1  0  0  0  0
  b  0  1  0  0  0
  c  0  0  1  0  0
  d  0  0  0  1  0
  e  0  0  0  0  1

};

在此我得到以下编译器错误:

const init = async (): Promise<types.IContextObject> => {
  let context: types.IContextObject;
  try {
      context = await createContext(dataObj);
  } catch (e) {
      dataObj.errors.insert({ message: e.message });
      process.exit(1);
  }

  context.info.insert({
    message: `Using Rules: `.bold + `${Object.keys(context.rules).join(', ')}`
  });
  return context;

如果我移动try块中的最后两行,我得到:

Variable 'context' is used before being assigned.
let context: types.IContextObject

2 个答案:

答案 0 :(得分:3)

如果您将其置于试验范围之外,则无法保证该值存在。如果你把它放在try中,你必须提供第二个return方法,以便在try尝试失败时返回一些东西。

因此,要么为context提供默认值,要么在底部提供默认的返回语句。这两种方法都可以。

答案 1 :(得分:1)

您的变量context未在try块之外定义。移动插入并返回try块内部并在catch中返回null,或者在声明时将context设置为null;但是,如果在catch语句之后没有进行适当的空值检查而执行后者,则在尝试访问info时可能会出错。