promise 相关问题

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

如何获取promise的“发起者”调试信息?

当使用 Visual Studio Code 之类的东西调试 Node.JS 中的 then Promise 回调时,调用堆栈似乎几乎是多余的。 而不是提供实际调用我的代码的函数...

回答 1 投票 0

如何使用axios请求上传base64

对于我在堆栈溢出中发现的所有转换为 Base 64 的函数,它都需要使用 Promise。所以我创建了一个生成新承诺的函数,然后等待它的响应然后...

回答 1 投票 0

Typescript Sqlite3 获取所有承诺解析列表

我目前正在为自己的目的开发一个小型看板应用程序,后端基于打字稿(我是 TS tbh 的新手)和一个简单的 sqlite3 数据库。所以目前我尝试从数据中获取数据...

回答 1 投票 0

捕获的非错误承诺拒绝值:未定义

const validatePnr = async (pnr: string) => { 返回新的 Promise(异步(解决,拒绝)=> { 尝试 { setIsLoading(true); const url = `/api/v2/pnr/validate?

回答 2 投票 0

如何反转 set_value() 并“停用”承诺?

我这里有一个关于同步的问题。我有一个“编写者”线程,它在每次迭代时为承诺分配不同的值“p”。我需要等待shared_futu的“读者”线程...

回答 4 投票 0

promise.all with循环仍然在node.js中处于待处理状态

此应用功能是上传多张图片,图片上传API每次只能上传一张图片。上传多个图像时,尝试循环图像并按顺序上传...

回答 1 投票 0

std::future 设置为“空”状态 c++

sr.tFuture 初始化为“空”状态而不是“挂起”状态,我发现当我从构造函数初始化列表中删除 tFuture() 时,sr.tFuture 的状态变为挂起状态...

回答 1 投票 0

PromiseLike<T>的类型是不是错误?

以下代码中 Promise 的类型与其解析值不一致: const p: Promise = Promise.resolve(1); const q: Promise = p.then(); const r: str...

回答 1 投票 0

如何收集promises的返回结果

如下面发布的代码所示,对于数组geoTIFFsFileNames,它包含五个文件的名称。对于后一个数组中的项目数,我想调用 Web 服务 WSGeoTIFFAsBlobStreame...

回答 1 投票 0

await 不会暂停执行,直到完成[关闭]

对于下面发布的代码,尽管我在Promise.all之前使用await,但代码的执行不会等到await Promise.all先完成。 发生的情况是,代码包含: .然后...

回答 1 投票 0

浏览器是否仍然默默地吞下未处理的被拒绝的承诺?节点呢?

有很多建议建议您确保不要让任何被拒绝的承诺得不到处理。如果您不这样做,建议会警告您,错误将永远不会被注意到,并且会被

回答 1 投票 0

如何构建我的代码以在返回 Promises 的函数中进行重试

所以我并没有真正对 C++ Promise 和 future 进行过多的研究,我无法理解如何向返回 Promise 的方法添加重试,但我有一个如下所示的方法 承诺 所以我并没有真正对 C++ Promise 和 future 进行过多的研究,我无法理解如何向返回 Promise 的方法添加重试,但我有一个如下所示的方法 promise<void> foo(Request){ /// There are N steps and i want to retry one of them < /// if any one of the step fails the function can return promise<void>::reject(std::errc::bar); .... /// we are at the end, everything succeed return promise::fulfilled(); } 但问题是其中一个步骤不稳定,我想为其添加重试,请注意,我不考虑添加睡眠并重试,因为我不想阻塞线程。 所以我想要的是将所有执行代码移动到一些新的内部方法中,如下所示 promise<void> executeFoo(Request request){ ... /// have all code here ... } 并且比 promise<void> foo(Request request){ /// have a utility class that can invoke methods on some delay /// and a fixed number of time, so something like return promise<void> {Util::Retry(/*delay_between_retries*/, /*number_Of_retries*/, /*some_other_thread*/, [&request](){ executeFoo(request); })}; 令我困惑的是,一旦 Promise foo(Request request) 执行并且第一次返回 Promise,我如何在以后的重试中履行/拒绝 Promise,或者我应该缓存 Promise,但其他请求可能会发生此调用,如出色地。我无法在网上找到任何代码来展示 Promise 如何与重试一起工作,但如果有人有一些资源,请分享。我知道我的代码片段不是实际的代码,因此在这方面的任何见解或指针将不胜感激。 重试函数必须从循环尝试提供的操作的函数创建自己的std::future。 class max_tries_exceeded : std::exception { max_tries_exceeded() : std::exception("maximum tries exceeded") {} }; template <typename Rep, typename Period, typename F, typename... Args> std::future<void> retry(std::chrono::duration<Rep, Period> timeout, size_t tries, F fn, Args... args) { return std::async([=]() mutable { for (; tries; --tries) { auto result = fn(args...); if (result.wait_for(timeout) == std::future_status::ready) { try { return result.get(); } catch() {} } } throw max_tries_exceeded{}; } }

回答 1 投票 0

我现在可以获得未来未处理的承诺拒绝行为吗?

将来,未处理的 Promise 拒绝将会以非零退出代码终止 Node.js 进程。 我的管道在它应该失败的时候通过了,并部署了一个可靠的版本...

回答 4 投票 0

纯 JavaScript $.Deferred

如果没有 jQuery,我将如何编写以下内容? var dfd = $.Deferred() dfd.done(完成) dfd.resolve() 函数完成(){ console.log('完成') } <p>如果没有 jQuery,我该如何编写以下内容?</p> <p></p><div data-babel="false" data-lang="js" data-hide="false" data-console="true"> <div> <pre><code>var dfd = $.Deferred() dfd.done(done) dfd.resolve() function done() { console.log(&#39;done&#39;) }</code></pre> <pre><code>&lt;script src=&#34;https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js&#34;&gt;&lt;/script&gt;</code></pre> </div> </div> <p></p> </question> <answer tick="false" vote="6"> <p>使用原生<em>promises</em>:</p> <pre><code>Promise .resolve() .then(done); function done() { console.log(&#39;done&#39;) } </code></pre> <p><strong>更新</strong></p> <p>不带链条:</p> <pre><code>let op = Promise.resolve(); op.then(done); function done() { console.log(&#39;done&#39;) } </code></pre> </answer> <answer tick="true" vote="5"> <p></p><div data-babel="false" data-lang="js" data-hide="false" data-console="true"> <div> <pre><code> function Deferred (){ let res,rej,p = new Promise((a,b)=&gt;(res = a, rej = b)); p.resolve = res; p.reject = rej; return p; }</code></pre> </div> </div> <p></p> <p>你只需要公开决心并拒绝即可使其发挥作用。</p> </answer> <answer tick="false" vote="0"> <p>使用本机 Promise 的问题是,解析和拒绝处理程序是在回调中提供的,因此如果您尝试在实际分配它们之前调用它们。</p> <p>在我看来,自己实现一个延迟会更强大,例如:</p> <p></p><div data-babel="false" data-lang="js" data-hide="false" data-console="true"> <div> <pre><code>function deferred() { let thens = [] let catches = [] let status let resolvedValue let rejectedError return { resolve: value =&gt; { status = &#39;resolved&#39; resolvedValue = value thens.forEach(t =&gt; t(value)) thens = [] // Avoid memleaks. }, reject: error =&gt; { status = &#39;rejected&#39; rejectedError = error catches.forEach(c =&gt; c(error)) catches = [] // Avoid memleaks. }, then: cb =&gt; { if (status === &#39;resolved&#39;) { cb(resolvedValue) } else { thens.unshift(cb) } }, catch: cb =&gt; { if (status === &#39;rejected&#39;) { cb(rejectedError) } else { catches.unshift(cb) } }, } } const d = deferred() setTimeout(() =&gt; { d.resolve(&#39;good&#39;) }, 1000) // Will be called after 1s d.then(value =&gt; console.log(&#39;#1 resolved!&#39;, value)) setTimeout(() =&gt; { // Will be called after 3s and executed right away as it&#39;s already resolved d.then(value =&gt; console.log(&#39;#2 resolved!&#39;, value)) }, 3000)</code></pre> </div> </div> <p></p> </answer> <answer tick="false" vote="0"> <p>如果您需要在构造函数之外解析/拒绝 Promise,您可以使用如下内容:</p> <p></p><div data-babel="false" data-lang="js" data-hide="false" data-console="true"> <div> <pre><code>const defer = {}, promise = new Promise((resolve, reject) =&gt; { Object.assign(defer, {resolve, reject}); // your async stuff... window.setTimeout(resolve, 5000, &#34;inside constructor&#34;); }); // your async stuff... window.setTimeout(defer.resolve, 1000, &#34;outside constructor&#34;); promise.then(function(result) { console.log(result); });</code></pre> </div> </div> <p></p> </answer> </body></html>

回答 0 投票 0

如何等待所有其他并行承诺解决?

我目前正在为网站实现客户端令牌刷新脚本,当需要刷新访问令牌时遇到了一个小问题。 对于某些页面,客户端获取了多个...

回答 1 投票 0

为什么我必须在“finally”之后添加“then”才能链接promise?

根据这个小提琴,如果我尝试从第一个承诺的 .finally() 块调用第二个承诺函数,则第二个承诺会解析,但解析值是“未定义”。 但是,如果我...

回答 2 投票 0

Next Js 13.4.4 应用程序路由面临问题类型错误:类型 '({ params }: Props) => Promise<Element | null>' 无法分配给类型 'FC<Props>'

“下一个”:“^13.4.3”,应用程序路线 “反应”:“^18.2.0”, "react-dom": "^18.2.0", 我在编译页面时收到此错误消息: 类型错误:类型...

回答 1 投票 0

如何解决异步的隐式Promise

所有标有“async”的函数都会返回一个 Promise 对象,即使它没有显式返回。于是我做了如下实验: 异步函数 getPromise() { setTimeout(() => { ...

回答 1 投票 0

await 与 then - 访问返回值

试图理解await 与then 之间的微妙(原文如此)差异。我已经阅读了这里的大部分帖子,所以我知道异步函数返回一个承诺。 使用await(带有异步函数)

回答 4 投票 0

Javascript 中的回调、Promises、异步等待 - 仍然令人困惑

我是 Javascript 新手,我看了很多视频,但我仍然无法理解回调、承诺和异步等待的确切用法。在这里,我根据我的知识编写了一些小代码。 我的index.html: 我是 Javascript 新手,我看了很多视频,但我仍然无法理解回调、承诺和异步等待的确切用法。在这里,我根据我的知识编写了一些小代码。 我的index.html: <!DOCTYPE html> <html lang="en" ng-app='myApp'> <head> <meta charset="UTF-8"> <title>Index</title> <script src='https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.6.5/angular.min.js'></script> <script src='https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js'></script> <script src='script.js'></script> </head> <body ng-controller='myController'> </body> </html> script.js: angular .module('myApp', []) .controller('myController', function($scope, $http) { // i think these are callbacks function callback(response) { console.log("Animal name:", response.data); } function callbackerr(response) { console.log("err:", response); } $http({ method: 'GET', url: 'animalname.json' }).then(callback) .catch(callbackerr); // i think these are promises $http({ method: 'GET', url: 'animalage.json' }).then(function(response) { console.log("Animal age: ", response.data); }).catch(function(error) { console.log(error); }) // i think to write new code in async await // how to write my above code using async await? }); 如果我对回调、承诺的假设是错误的,请修改并解释。 帮助我! 回调只是一个函数,它作为参数传递到另一个函数中,然后在其中执行。 Promise 只是一种也接受回调的模式。要在 javascript 中使用新的异步/等待模式编写相同的内容,您可以编写类似这样的内容。 注意控制器函数以 async 为前缀。 Async/await 只是让代码看起来更加程序化。 angular .module('myApp', []) .controller('myController', async function($scope, $http) { const response = await $http({ method: 'GET', url: 'animalage.json' }) console.log("Animal age: ", response.data); }); 我可以理解您的困惑,当我们进行同步调用时,即当您向服务器发送请求时,JavaScript 不会停止执行以下代码。当以下代码使用服务器请求的响应数据时,这可能会出现问题,因为服务器请求可能尚未完成。这是通过承诺解决的。 Javascript 的事件驱动方法为我们提供了两个事件,一个是在 Promise 被解析时(服务器响应数据),另一个是在 Promise 被拒绝时(服务器错误)。 在.then块中,我们可以调用使用响应数据的回调函数。在 .catch 块中,我们可以调用回调函数,通知用户错误或重试服务器请求。 因此,我们可以调用 .then 和 .catch 函数的任何函数都是 Promise,而我们在 .then 和 .catch 块中编写的函数称为回调函数。 回调:回调是一个可以作为另一个函数的参数传递的函数。然后可以稍后调用它来使用和处理异步编程。 Promise:Promise 是回调机制的更新,可以轻松处理异步操作。它实际上使处理异步任务变得容易,而不是回调地狱(嵌套回调)问题。 Async/Await:Async/Await 直观且直接地构建在 Promise 之上。 我找到了一篇关于 Async/Await 的主题和演变的优秀文章:https://masudsaiful.github.io/javascript-async-await-step-by-step-tutorial

回答 3 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.