【问题标题】:HHVM Class Undefined SleepWaitHandleHHVM 类未定义的 SleepWaitHandle
【发布时间】:2015-07-23 01:30:52
【问题描述】:

我正在尝试在 larval 应用程序中使用 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

【问题讨论】:

    标签: hhvm hacklang


    【解决方案1】:
    • 到你的第一个问题:\SleepWaitHandle 实际上不存在。完全限定的类名是\HH\SleepWaitHandle(或者可能是\HH\Asio\SleepWaitHandle,我不太记得了)。如果您注意到,所有示例都省略了开头的\——在Hack 代码中,几个类,例如SleepWaitHandle,会自动导入到您当前的命名空间中,前提是没有冲突的类名。您需要使用此行为,或使用正确的完全限定名称。
    • 对于您的第二个问题,这是博客示例中的一个错误——糟糕! run 的参数应该是 array&lt;WaitHandle&lt;string&gt;&gt; $handles。我已经更新了博客文章中的示例。这是一个奇怪的例子——你通常不直接使用AwaitAllWaitHandle;相反,您应该使用\HH\Asio\v()\HH\Asio\m() 函数,或许得到官方asio-utilities composer package 的支持。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-31
      • 2013-05-02
      • 2020-03-23
      相关资源
      最近更新 更多