2015-07-22 2 views
0

Я пытаюсь использовать асинхронные функции HHVM в личиночном приложении. Я добавил ключевое слово async к моей функции, но получаю сообщение об ошибке в строке с ожиданием SleepWaitHandle. В нем говорится, что класс не определен. Похоже, что документация не изменилась. Что мне не хватает?HHVM Class Undefined 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 

ответ

1
  • Для вашей первой проблемы: \SleepWaitHandle на самом деле не существует. Полноценное имя класса - \HH\SleepWaitHandle (или, может быть, \HH\Asio\SleepWaitHandle, я не совсем помню). Если вы заметили, все примеры опускают ведущий \ - в коде Hack несколько классов, таких как SleepWaitHandle, автоматически импортируются в ваше текущее пространство имен при условии, что не существует конфликтующего имени класса. Вам нужно либо использовать это поведение, либо использовать правильное полное имя.
  • К вашей второй проблеме, это ошибка в примере на блоге - oops! Параметр run должен быть array<WaitHandle<string>> $handles. Я обновил этот пример в блоге. Однако это странный пример - вы обычно не работаете с AwaitAllWaitHandle напрямую; вместо этого вы должны использовать функции \HH\Asio\v() и \HH\Asio\m(), возможно, при поддержке официального asio-utilities composer package.