在杜克塔佩上使用承诺

Use promise on Duktape

本文关键字:承诺 杜克塔      更新时间:2023-09-26

我们如何在Duktape之上使用promise?

我的场景:将客户端JavaScript代码迁移到Duktape,该代码在Web浏览器上加载良好。我正在使用Dukluv(与Duktape和libuv库绑定)二进制文件来运行JavaScript。但是我的javascript依赖于BlueBird库

当我尝试执行时,出现错误: no async scheduler available

问题出在蓝鸟的时间表.js第33行。代码如下,供参考:

else if ((typeof MutationObserver !== "undefined" &&
         (_MutationObserver = MutationObserver)) ||
         (typeof WebKitMutationObserver !== "undefined" &&
         (_MutationObserver = WebKitMutationObserver))) {
    schedule = (function() {
        var div = document.createElement("div");
        var queuedFn = void 0;
        var observer = new _MutationObserver(
            function Promise$_Scheduler() {
                var fn = queuedFn;
                queuedFn = void 0;
                fn();
            }
       );
        observer.observe(div, {
            attributes: true
        });
        return function Promise$_Scheduler(fn) {
            queuedFn = fn;
            div.classList.toggle("foo");
        };
    })();
}

没有webkitmutationobserver或文档对象,因为我在没有任何浏览器的情况下在Dukluv上运行我的脚本。

我也尝试使用 Q 库,即使在那里我也会收到错误setTimeout not defined.如果可能的话,请向我建议一个解决方案,使用一些代码片段。谢谢

Bluebird 允许您为这些场景显式设置调度程序。你需要告诉蓝鸟如何直接执行一个函数:

Promise.setScheduler(function(fn){ // fn is what to execute
    var timer = uv.new_timer.call({});
    uv.timer_start(timer, 0, 0, fn); // add the function as a callback to the timer
});

首先执行所有承诺代码 - 这将解决上述错误。