javascript - 在 Duktape 上使用 promise

标签 javascript promise bluebird duktape

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

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

当我尝试执行时出现错误: 没有可用的异步调度程序

问题出在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 library,即使在那里我也收到错误消息 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 - 在 Duktape 上使用 promise,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27432759/

相关文章:

javascript - 异步事件和异常

javascript - 压缩验证策略

ajax - jQuery $when.apply() .. then() 为每个完成的请求触发

javascript - 如何将嵌套回调变成promise?

javascript - 仅当代码在 3 秒内未执行时才执行 block

javascript - req.body.username 未输出正确的值

javascript - 从 javaScript Phonegap 上传文件的方法

javascript - Mongoose 似乎悄然失败了

angularjs - 如何使用 Protractor 向流量控制队列添加 promise ?

javascript - 如何将现有回调 API 转换为 Promise?