javascript - 在Duktape上使用诺言

我们如何在Duktape上使用Promise?

我的方案:将可在网络浏览器上很好地加载的客户端javascript代码迁移到Duktape。我正在使用Dukluv(与Duktape和libuv库绑定)二进制文件来运行JavaScript。但是我的JavaScript取决于BlueBird库。

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

问题出在bluebird的schedule.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使您可以为这些方案明确设置调度程序。您需要告诉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
});


在您的所有promise代码之前执行此操作-这将解决上述错误。

译文:来源   文章分类: javascript promise bluebird duktape

相关文章:

javascript - 如何从Python生成D3.js圆形树状图代码

javascript - 如何在Google图表中的svg中获取带有图片的png(base64)?

javascript - 覆盖特定功能的toString

javascript - 如何使用React添加帖子?

javascript - 从Google Maps api json获取formatted_address

javascript - 如何在特定路径前缀上安装app.get()路由

javascript - Google Apps脚本-getRowIndex不起作用

javascript - Javascript上的程序无法正常工作

javascript - 使用Yup进行表单验证以检查输入值是否相等

javascript - 我的Jquery在我的html文件中不起作用