workflow_wasm/
defer.rs

1//! The [`defer`] utility function.
2
3use cfg_if::cfg_if;
4use wasm_bindgen::prelude::*;
5
6cfg_if! {
7    if #[cfg(not(feature = "no-unsafe-eval"))] {
8
9        /// Deferred promise - an object that has `resolve()` and `reject()`
10        /// functions that can be called outside of the promise body.
11        /// WARNING: This function uses `eval` and can not be used in environments
12        /// where dynamically-created code can not be executed such as web browser
13        /// extensions.
14        /// @category General
15        #[wasm_bindgen]
16        pub fn defer() -> js_sys::Promise {
17            js_sys::Function::new_no_args(
18                r###"
19                let resolve, reject;
20                const p = new Promise((resolve_, reject_) => {
21                    resolve = resolve_;
22                    reject = reject_;
23                });
24                p.resolve = resolve;
25                p.reject = reject;
26                return p;
27            "###,
28            )
29            .call0(&JsValue::undefined())
30            .unwrap()
31            .into()
32        }
33    }
34}