HHVM类未定义



我试图在幼虫应用程序中使用HHVM的异步函数。我将async关键字添加到我的函数中,但我在等待SleepWaitHandle的行上得到一个错误。它说类是未定义的。这方面的文档似乎没有改变。我错过了什么?

await SleepWaitHandle::create(DB::table('submissions')->insert($submissions_for_insert));

我在3.9的夜间版本和3.8的稳定版本中遇到过这种情况。运行ubuntu 14.10

我试着运行一个演示从http://hhvm.com/blog/7091/async-cooperative-multitasking-for-hack

<?hh
async function hello(): Awaitable<string> {
  return "Hello World";
}
async function goodbye(): Awaitable<string> {
  return "Goodbye, everybody!";
}
async function run(
  array<Awaitable<string>> $handles,
): Awaitable<array<string>> {
  await AwaitAllWaitHandle::fromArray($handles);
  return array_map($handle ==> $handle->result(), $handles);
}
$results = run(array(hello(), goodbye()))->getWaitHandle()->join();
print_r($results);
// Array
// (
//  [0] => Hello World
//  [1] => Goodbye, everybody!
// )

但是在命令行上运行它返回

Catchable fatal error: Hack type error: Invalid argument at /test/asyn.php line 12
  • 你的第一个问题:SleepWaitHandle实际上不存在。完全限定类的名称是HHSleepWaitHandle(或者可能是HHAsioSleepWaitHandle,我不太记得了)。如果您注意到,所有示例都省略了前面的——在Hack代码中,几个类(如SleepWaitHandle)被自动导入到当前的名称空间中,前提是没有冲突的类名。您需要使用此行为,或者使用正确的全限定名称。
  • 对于你的第二个问题,这是博客上的例子中的一个bug——哎呀!run的参数应该是array<WaitHandle<string>> $handles。我在博客文章中更新了这个例子。这是一个奇怪的例子——你通常不直接使用AwaitAllWaitHandle;相反,您应该使用HHAsiov()HHAsiom()函数,可能还需要官方的asio-utilities编写器包的支持。

相关内容

  • 没有找到相关文章

最新更新