JavaScript Promise Integration (JSPI) — это API, который позволяет синхронному последовательному коду, скомпилированному в WebAssembly, получать доступ к асинхронным веб-API. Многие веб-API созданы с использованием обещаний JavaScript: вместо немедленного выполнения запрошенной операции они возвращают обещание сделать это. Когда действие наконец выполнено, средство запуска задач браузера вызывает все обратные вызовы с обещанием. JSPI подключается к этой архитектуре, чтобы позволить приостановить работу приложения WebAssembly при возврате обещания и возобновить его после выполнения обещания.
Начиная с Chrome 123 и до Chrome 128, JSPI доступен в качестве пробной версии . Узнайте больше о JSPI в записи блога Introducing the WebAssembly JavaScript Promise Integration API или в черновике спецификации .
Чтобы лучше понять, как использовать эту функцию, рассмотрим следующий отрывок из программы на языке C, которая вычисляет последовательность Фибоначчи, передавая дополнение к функции JavaScript.
// This is C code.
long promiseFib(long x) {
if (x == 0)
return 0;
if (x == 1)
return 1;
// This is where the C code calls asynchronous JavaScript.
return promiseAdd(promiseFib(x - 1), promiseFib(x - 2));
}
// Addition artificially wrapped in a Promise.
EM_ASYNC_JS(long, promiseAdd, (long x, long y), {
// This is asynchronous JavaScript code.
return Promise.resolve(x+y);
});
Чтобы скомпилировать эту программу C в WebAssembly, используйте следующую команду, для которой требуется Emscripten SDK .
emcc -O3 badfib.c -o index.html -s ASYNCIFY=2
Вы можете обнаружить поддержку JSPI в JavaScript следующим образом:
if ('Suspender' in WebAssembly) {
// JSPI is supported.
}
Демо-версия JSPI из предыдущего примера кода доступна на Glitch , а также встроена в следующий пример. Если хотите, вы можете просмотреть исходный код , сгенерированный Emscripten, но на самом деле интересный код — это исходная программа на языке C (нажмите на эту ссылку, чтобы загрузить код).
Чтобы опробовать JSPI на реальных пользователях вашего приложения, подпишитесь на пробную версию Origin . Если вам нужны инструкции, прочтите «Начало работы с пробными версиями оригинального продукта» . Команда JSPI с нетерпением ждет ваших отзывов о пробной версии Origin (см. шаг 5 в инструкциях), чтобы эта функция соответствовала вашим потребностям, когда она появится!