JavaScript Promise Integration (JSPI) là một API cho phép mã tuần tự đồng bộ được biên dịch sang WebAssembly để truy cập vào Web API không đồng bộ. Nhiều API web được tạo theo lời hứa JavaScript: thay vì thực hiện ngay thao tác được yêu cầu, các API này sẽ trả về một lời hứa để thực hiện thao tác đó. Khi hành động cuối cùng được thực hiện, trình chạy tác vụ của trình duyệt sẽ gọi mọi lệnh gọi lại bằng lời hứa. JSPI sẽ liên kết với cấu trúc này để cho phép tạm ngưng một ứng dụng WebAssembly khi lời hứa được trả về và tiếp tục khi lời hứa được giải quyết.
Từ Chrome 123 cho đến Chrome 128, JSPI được cung cấp dưới dạng bản dùng thử theo nguyên gốc. Hãy tìm hiểu thêm về NetzDGI trong bài đăng trên blog Giới thiệu API Tích hợp lời hứa hẹn JavaScript của WebAssembly hoặc trong bản nháp quy cách.
Để hiểu rõ hơn về cách sử dụng tính năng này, hãy xem xét phần trích dẫn sau đây của một chương trình C dùng để tính toán trình tự Fibonacci bằng cách thuê ngoài dữ liệu bổ sung cho một hàm 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);
});
Để biên dịch chương trình C này thành WebAssembly, hãy sử dụng lệnh sau. Lệnh này yêu cầu SDK Emscripten.
emcc -O3 badfib.c -o index.html -s ASYNCIFY=2
Bạn có thể phát hiện tính năng hỗ trợ JavaScriptI từ JavaScript như sau:
if ('Suspender' in WebAssembly) {
// JSPI is supported.
}
Bạn có thể xem bản minh hoạ JSPI từ mã mẫu trước đó trên Glitch và cũng được nhúng trong phần sau. Bạn có thể xem mã nguồn do Emscripten tạo nếu muốn, nhưng mã thực sự thú vị là chương trình C gốc (nhấp vào đường liên kết này sẽ tải mã xuống).
Để dùng thử JSPI với người dùng thực tế của ứng dụng, hãy đăng ký dùng thử phiên bản gốc. Hãy đọc bài viết Bắt đầu dùng thử phiên bản gốc nếu bạn cần hướng dẫn. Nhóm JSPI rất mong nhận được ý kiến phản hồi của bạn về bản dùng thử nguyên gốc (xem Bước 5 trong hướng dẫn) để tính năng này phù hợp với nhu cầu của bạn khi được cung cấp!