タグ付けされた質問 「promise」

Promiseは、ローカルコンピューティングのスレッドとイベントループの同時実行、および同期と非同期の両方のリモートメッセージングなど、いくつかの同時実行スタイルに適した遅延コンピューティングの戦術です。promiseは、非同期操作の最終的な結果を表します。プロミスを処理する主な方法は、プロミスの最終的な価値または失敗の理由から新しいプロミスへの変換を登録する方法です。

1
内部から約束を拒否し、機能する方法
これはおそらくばかげた質問ですが、プロミスチェーンの途中で、当時の関数の1つからプロミスを拒否するにはどうすればよいですか?例えば: someActionThatReturnsAPromise() .then(function(resource) { return modifyResource(resource) }) .then(function(modifiedResource) { if (!isValid(modifiedResource)) { var validationError = getValidationError(modifiedResource); // fail promise with validationError } }) .catch(function() { // oh noes }); 元の解決/拒否関数またはPromiseResolverへの参照はなくなりました。追加するだけreturn Promise.reject(validationError);ですか?

5
Angular $ qpromiseが解決されたかどうかを確認する方法
通常、then()promiseを使用する場合は、呼び出しとチェーンの動作を伴う継続コードを添付するだけであることを理解しています。 ただし、プロミスでラップされた非同期呼び出しを開始してから、3秒を個別に開始して$timeout()、元のプロミスがまだ完了していない場合にのみUIアクションを実行できるようにします。(これは、低速接続、3G上のモバイルデバイスなどでのみ発生すると予想されます) 約束が与えられたら、ブロックしたり待ったりせずに、それが完了したかどうかを確認できますか?
84 angularjs  promise  q 

6
jQuery AJAX呼び出しの「finally」に類似したものはありますか?
jQuery AJAX呼び出しにJavaの「最終的に」類似物はありますか?私はここにこのコードを持っています。私はいつも例外をスローしますが、常にthen()メソッドに移動させたいと思っています。 call.xmlHttpReq = $.ajax({ url : url, dataType : 'json', type : 'GET' }).always(function(processedDataOrXHRWrapper, textStatus, xhrWrapperOrErrorThrown) { throw "something"; }).then(function() { alert("i want to always run no matter what"); }); done()、complete()、および別のalways()を使用しようとしましたが、何も機能しないようです。 これがJSFiddleです: http://jsfiddle.net/qv3t3L0m/

4
Angular.jsで約束が果たされたときに常にコードを実行する方法
私のAngular.jsアプリケーションでは、非同期操作を実行しています。開始する前に、モーダルdivでアプリケーションをカバーします。操作が完了したら、操作が成功したかどうかに関係なく、divを削除する必要があります。 現在私はこれを持っています: LoadingOverlay.start(); Auth.initialize().then(function() { LoadingOverlay.stop(); }, function() { LoadingOverlay.stop(); // Code needs to be duplicated here }) それはうまく機能しますが、私はこの疑似コードのようなよりクリーンなものが欲しいです: LoadingOverlay.start(); Auth.initialize().finally(function() { // *pseudo-code* - some function that is always executed on both failure and success. LoadingOverlay.stop(); }) これはかなり一般的な問題だと思うので、できると思っていましたが、ドキュメントに何も見つかりませんでした。それができるかどうか何か考えはありますか?

6
JSDocでpromiseの解決と拒否のタイプを指定するにはどうすればよいですか?
NodeJSにQライブラリを使用するなど、promiseオブジェクトを返すコードがいくつかあります。 var Q = require('q'); /** * @returns ??? */ function task(err) { return err? Q.reject(new Error('Some error')) : Q.resolve('Some result'); } JSDocを使用してそのような戻り値を文書化する方法は?

2
延期対約束
jQueryバージョン以外のDeferredとPromiseの違いは何ですか? 必要に応じて何を使用すればよいですか?だけ呼びたいですfooExecute()。たとえば、fooStart()とだけでfooEnd()htmldivステータスを切り替えることができます。 //I'm using jQuery v2.0.0 function fooStart() { /* Start Notification */ } function fooEnd() { /* End Notification */ } function fooExecute() { /* Execute the scripts */ } $('#button1').on('click', function() { var deferred1 = $.Deferred(); var promise1 = $.Promise(); deferred1.??? promise1.??? });

9
約束の配列を順番に実行するにはどうすればよいですか?
順番に実行する必要のある一連のPromiseがあります。 var promises = [promise1, promise2, ..., promiseN]; RSVP.allを呼び出すと、それらが並行して実行されます。 RSVP.all(promises).then(...); しかし、どうすればそれらを順番に実行できますか? このように手動で積み重ねることができます RSVP.resolve() .then(promise1) .then(promise2) ... .then(promiseN) .then(...); ただし、問題は、Promiseの数が変化し、Promiseの配列が動的に構築されることです。

2
Reactフックのマウントされていないコンポーネントでのメモリリークのクリーンアップ
私はReactを初めて使用するので、これを達成するのは非常に簡単かもしれませんが、いくつかの調査を行ったとしても、自分でそれを理解することはできません。これがばかげている場合、私を許してください。 環境 Laravel(バックエンド)アダプターとReact(フロントエンド)アダプターでInertia.jsを使用しています。あなたが慣性を知らないなら、それは基本的に: Inertia.jsを使用すると、クラシックなサーバー側ルーティングとコントローラーを使用して、最新の単一ページのReact、Vue、Svelteアプリをすばやく構築できます。 問題 私は、送信されたときにPOSTリクエストを実行して次のページをロードするフォームを持つ単純なログインページを実行しています。正常に動作しているようですが、他のページではコンソールに次の警告が表示されます: 警告:マウント解除されたコンポーネントでReact状態の更新を実行できません。これは何もしませんが、アプリケーションのメモリリークを示しています。修正するには、useEffectクリーンアップ関数ですべてのサブスクリプションと非同期タスクをキャンセルします。 ログイン中(慣性により作成) 関連コード(関係のない行を避けるために簡略化しました): import React, { useEffect, useState } from 'react' import Layout from "../../Layouts/Auth"; {/** other imports */} const login = (props) => { const { errors } = usePage(); const [values, setValues] = useState({email: '', password: '',}); const [loading, setLoading] = useState(false); …

4
Promiseを使用してCSSプロパティを設定すると、thenブロックで実際に設定されないのはなぜですか?
次のスニペットを実行してから、ボックスをクリックしてください。 const box = document.querySelector('.box') box.addEventListener('click', e => { if (!box.style.transform) { box.style.transform = 'translateX(100px)' new Promise(resolve => { setTimeout(() => { box.style.transition = 'none' box.style.transform = '' resolve('Transition complete') }, 2000) }).then(() => { box.style.transition = '' }) } }) .box { width: 100px; height: 100px; border-radius: 5px; background-color: …

2
ブラウザーがネイティブPromiseをサポートしていない場合、マイクロタスクをキューに入れる方法は?
即時のコールバックのタイミングに依存しないコード(マイクロタスクとマクロタスクのような)を書く方が良いですが、とりあえず脇に置いておきましょう。 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最初のキューに入れられました。ただし、Promiseをサポートしているのは最新のブラウザのみです。どのようにすることができ、特別な場合にはマイクロタスクの機能が適切にpolyfilledことPromiseは存在しないのですか? .thenを使用してのマイクロsetTimeoutタスクを模倣しようとすると、マイクロタスクではなくマクロタスクがキューイングされるため、.thenマクロタスクがすでにキューに登録されている場合、不適切にポリフィルされたものが適切なタイミングで実行されません。 を使用した解決策がありますMutationObserverが、見た目が醜く、それMutationObserverが目的ではありません。また、MutationObserverIE10以前ではサポートされていません。Promiseをネイティブでサポートしていない環境でマイクロタスクをキューに入れたい場合、より良い代替手段はありますか? (私は実際にはIE10をサポートしようとしているわけではありません。これは、Promiseなしでマイクロタスクをキューに入れる方法についての理論的な演習です)

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を使用すると、ブラウザが拒否を2回返すのに、解決を2回返さないのはなぜですか?
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
楽で約束をタイムアウトするにはどうすればよいですか?
私はをPromise一定の時間内に維持するようにスケジュールできることを知っています my $promise = Promise.in($seconds); しかし、どうすれば壊れるようにスケジュールできますか?具体的には、「タイムアウト」して、一定の時間が経過すると失敗するという約束を考えています。 私は次のPromiseように別のでこれを行うことができます: my $promise = Promise.new; ... Promise.in($seconds).then: { $promise.break }; しかし、これは少し...無駄に感じます。これを行うより良い方法はありますか?
9 promise  raku 
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.