Questions tagged «promise»

承诺是延迟计算的一种策略,适用于多种并发样式:用于本地计算的线程和事件循环并发,以及同步和异步远程消息传递。一个promise表示异步操作的最终结果。处理承诺的主要方式是通过注册从承诺的最终值或失败原因到新承诺的转换的方法。

2
如果浏览器不支持本机Promises,如何将微任务排队?
最好编写不依赖于立即回调的时间(例如微任务与宏任务)的代码,但是暂时不考虑它。 setTimeout将宏任务排队,该宏任务至少等待开始,直到所有微任务(以及它们产生的微任务)完成。这是一个例子: console.log('Macrotask queued'); setTimeout(function() { console.log('Macrotask running'); }); Promise.resolve() .then(function() { console.log('Microtask running'); }); console.log('Microtask queued'); console.log('Last line of script'); 运行代码段隐藏结果展开摘要 的行为.then上解决承诺是立即的行为根本不同的setTimeout回调-无极.then将首先运行,即使setTimeout是第一次排队。但是,只有现代的浏览器才支持Promises。如果不存在,如何正确填充微任务的特殊功能Promise? 如果您尝试使用来模仿.then的微setTimeout任务,则会排队执行宏任务,而不是微任务,因此,.then如果已将宏任务排入队列,则填充不良的代码将无法在正确的时间运行。 有一个使用的解决方案MutationObserver,但它看起来很丑陋,不是什么MutationObserver用。另外,MutationObserverIE10及更早版本不支持。如果要在本机不支持Promises的环境中排队微任务,还有其他更好的选择吗? (我实际上并不是在尝试支持IE10-这只是关于如何在没有Promises的情况下将微任务排队的理论练习)

3
查找未处理的承诺拒绝的来源:TypeError:检测到承诺的链接周期
我正在尝试从Node.js中的Promise中找到未处理的拒绝的来源 我尝试使用--async-stack-traces选项升级到节点版本12,并使用以下命令监听它们: process.on("unhandledRejection",( reason, promise ) => { console.log(reason); console.log(promise); }); 但是我仍然看不到任何有用的堆栈跟踪信息来帮助我找到罪魁祸首! UnhandledPromiseRejectionWarning: TypeError: Chaining cycle detected for promise #<Promise> at process._tickCallback (internal/process/next_tick.js:68:7) (node:89675) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was …

1
有了Promise,为什么浏览器会两次返回拒绝,但不会两次返回解析?
我在理解javaScript时遇到了麻烦promises。我写了以下代码: var p = new Promise(function(resolve,reject){ reject(Error("hello world")); }); setTimeout(()=>p.catch(e=>console.log(e)),5000); 我立即在Chrome开发者控制台中看到以下内容: 但是,等待5秒钟后,该消息会自动变为黑色,如下图所示: 我以前从未在javaScript代码和开发人员控制台之间看到过这种行为,在这里,我的javaScript代码可以在开发人员控制台中“修改现有内容”。 因此,我决定resolve通过编写以下代码来查看是否发生相同的情况: var p = new Promise(function(resolve,reject){ resolve("hello world"); }); setTimeout(()=>p.then(e=>console.log(e)),5000); 但是在这种情况下,我的开发者控制台要等5秒钟后才显示任何内容,然后打印到hello world。 为什么在调用时将resolve和reject区别开来? 额外 我也写了这段代码: var p = new Promise(function(resolve,reject){ reject(Error("hello world")); }); setTimeout(()=>p.catch(e=>console.log("errors",e)),5000); setTimeout(()=>p.catch(e=>console.log("errors 2",e)),6000); setTimeout(()=>p.catch(null),7000); 这将导致多个输出到开发人员控制台。红色错误在时间0处出现,红色在5秒处变为带有文本的黑色errors hello world,然后在6秒钟处出现新的错误消息errors 2 hello world,然后在7秒钟处出现红色错误消息。现在我对一个reject实际被调用多少次感到非常困惑...我迷路了...

1
如何在Raku中使承诺超时?
我知道我可以安排Promise在一定时间内保存 my $promise = Promise.in($seconds); 但是我该如何安排它被破坏?具体来说,我正在考虑一个将“超时”的承诺,这样它可以保留一定的时间,否则将失败。 我可以用另一个做Promise,就像这样: my $promise = Promise.new; ... Promise.in($seconds).then: { $promise.break }; 但这感觉有点...浪费。有一个更好的方法吗?
9 promise  raku 
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.