Promise是延迟计算的一种策略,适用于多种并发风格:本地计算的线程和事件循环并发,以及同步和异步远程消息传递。 promise表示异步操作的最终结果。使用promises的主要方法是通过一种方法,将promise的最终值或失败原因的转换注册到新的promise。
使用 Portal 和 Promise 创建动态 React 组件
使用简单的函数从我的 React 应用程序中的任何位置调用模态或抽屉。 我已经通过使用 root.render 完成了这项工作,但是 root.render 的问题是他们找不到我以前的任何内容
实现可中止API时如何优雅地管理AbortSignal事件监听器?
考虑这个简单的示例,可能是您编写了几次但现在可以中止的函数: /** * * @param {number} 延迟 * @param {AbortSignal} [abortSignal] * @returns {承诺 考虑这个简单的示例,可能是您编写了几次但现在可中止的函数: /** * * @param {number} delay * @param {AbortSignal} [abortSignal] * @returns {Promise<void>} */ export default function timeoutPromise(delay, abortSignal) { return new Promise((resolve, reject) => { if(abortSignal) { abortSignal.throwIfAborted(); } const timeout = setTimeout(() => { resolve(); }, delay); abortSignal.addEventListener("abort", () => { clearTimeout(timeout); reject(new Error("Aborted")); }); }); } 明显的问题是,如果超时正常成功,这不会清除 eventListener。可以做到,但是很难看: /** * * @param {number} delay * @param {AbortSignal} [abortSignal] * @returns {Promise<void>} */ export default function timeoutPromise(delay, abortSignal) { return new Promise((resolve, reject) => { if(abortSignal && abortSignal.aborted) { reject(new Error("timeoutPromise aborted")); } let timeout = null; function abortHandler() { clearTimeout(timeout); reject(new Error("timeoutPromise aborted")) } timeout = setTimeout(() => { if(abortSignal) { abortSignal.removeEventListener("abort", abortHandler); } resolve(); }, delay); if(abortSignal) { abortSignal.addEventListener("abort", abortHandler, {once: true}); } }); } 对于这么简单的事情来说,有很多代码。我这样做对吗还是有更好的方法? 您可以对 AbortSignal 上的方法调用使用可选链接: function delay(ms, signal) { return new Promise((resolve, reject) => { function done() { resolve(); signal?.removeEventListener("abort", stop); } function stop() { reject(this.reason); clearTimeout(handle); } signal?.throwIfAborted(); const handle = setTimeout(done, ms); signal?.addEventListener("abort", stop); }); }
我一直在与这个疑问作斗争,因为在事件循环中,作业队列比回调队列具有更高的优先级,即 Promise 比 setTimeout 具有更高的优先级,那么: 新的承诺(解决...
React 组件 - 在开始新的 Promise 之前,等待先前的 Promise 方法 (fetch) 到达其 finally {} 块(使用 AbortController 取消)
我有一个 React 组件,有 3 个按钮,代表用户可以做出的 3 个选择。 如果用户单击一个按钮,然后单击另一个按钮,我会使用 AbortController.signal 取消之前的 HTTP 请求...
在 JavaScript 中等待时,哪些函数会传递给 Promise?
考虑以下代码,它等待 Promise: 异步函数handleSubmit() { 尝试 { 等待提交表单(答案); } 捕获(错误){ 控制台.log('错误') } } 功能
是否已经有类似以下内容的东西。 /** * 前任。 * const ret = 等待 asyncify(Math.max)(arg1, arg2); */ 异步(函数){ 返回异步(...输入)=> { // ...
我正在使用 Promise 和异步函数。我知道,在异步函数内部,如果有一个await out JS引擎将暂停正在进行的调用堆栈的函数调用并且......
在使用“then”附加解析函数之前,promise 执行器调用解析函数时到底调用了什么?
我发誓这种语言毫无意义。 Promise 执行器立即运行,在这种情况下,它调用解析函数,但尚未附加解析处理程序: // 流量站...
我正在使用代理对象,在其中检测对象值更改,然后通过 AJAX 加载新内容,我使用 setInterval 函数等待 AJAX 请求中出现的元素存在...
JavaScript Promises :带有 bind(this) 的深层嵌套上下文
因为我使用的原型具有调用同一原型中其他函数的函数,所以我必须使用 this 来引用该方法 由此产生的问题: 但正因为如此,我必须
我正在创建一个Chrome扩展程序,其部分功能是单击网站的链接,该网站本身将打开一个新选项卡,然后我的扩展程序将打印该选项卡。我现在面临一个问题......
为什么我们不使用递归函数而不是 Promise? [已关闭]
我正在尝试掌握异步 JS 的概念,其中有一个 Promise 的概念,用于逃避嵌套调用堆栈。一个调用堆栈,我只是觉得这可以做得更好......
为什么 Angular httpclient 使用观察者而不是 Promise?
我一直在寻找角度文档,为什么httpClient使用观察者,但我没有找到一个好的答案。 我的问题是因为我正在开展一个大型项目,我们正在寻找最精简的...
如何修复未捕获(承诺中)DOMException:用户中止了请求 SoundCloud 小部件 Api
如何修复未捕获(承诺中)DOMException:用户中止了请求 SoundCloud 小部件 Api。 SoundCloud 小部件 API 不返回承诺。那么如何修复它。这个错误显示在控制台中...
请看下面的代码 var arr =等待[1,2,3,4,5].map(async(索引)=>{ 返回等待新的 Promise((解决,拒绝) => { 设置超时(()=> { 解决(索引);
我失去理智了!我尝试从表单获取数据并将其传递给 php 脚本,该脚本将数据放入 csv 文件和数据库中。这是可行的,但是我正在尝试验证
在新的 Promise() javascript 中调用 .then
在学习promise.then()语法之前我已经学习了javascript async/await,现在我正在尝试回去学习promise.then()。 我目前有以下代码 让 getDatabaseData = asy...
为什么 `promise.finally` 在调用者的 `then` 之后执行?
考虑一下: 常量 a = () => { 返回新的 Promise((resolve) => { 解决(1); }); }; 常量 b = () => { 返回新的 Promise((resolve) => { A() .then((aR) => {...
我的应用程序中有一个 i18n 服务,其中包含以下代码: var i18nService = 函数() { this.ensureLocaleIsLoaded = function() { if(!this.existingPromise) { 这个。
[Promise.reject(42), Promise.resolve(4)].forEach((item, i) => { Promise.resolve(项目) .then(() => console.log("解决", i)) .catch(() => console.log("拒绝", i)); }); 经验...