gpt4 book ai didi

javascript - 在 Duktape 上使用 promise

转载 作者:行者123 更新时间:2023-11-30 00:35:22 32 4
gpt4 key购买 nike

我们如何在 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/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com