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

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

4
約束、追加のパラメーターをチェーンに渡します
たとえば、約束: var P = new Promise(function (resolve, reject) { var a = 5; if (a) { setTimeout(function(){ resolve(a); }, 3000); } else { reject(a); } }); 呼び出した後、promiseのメソッド: P.then(doWork('text')); doWork関数は次のようになります。 function doWork(data) { return function(text) { // sample function to console log consoleToLog(data); consoleToLog(b); } } doWorkで内部関数を返さないようにして、promiseおよびtextパラメーターからデータにアクセスするにはどうすればよいですか?内部機能を回避するためのトリックはありますか?

2
TypeError:未定義のプロパティ 'then'を読み取れません
loginService.islogged() 上記の関数は、「失敗」のような文字列を返します。しかし、それを実行しようとすると、関数でエラーが返されます TypeError: Cannot read property 'then' of undefined カーソルは直後connectedと直前を示します.then。 以下は完全な機能です: var connected=loginService.islogged(); alert(connected); connected.then(function(msg){ alert("connected value is "+connected); alert("msg.data value is "+msg.data); if(!msg.data.account_session || loginService.islogged()=="failed") $location.path('/login'); }); 更新 ここにislogged()機能があります islogged:function(){ var cUid=sessionService.get('uid'); alert("in loginServce, cuid is "+cUid); var $checkSessionServer=$http.post('data/check_session.php?cUid='+cUid); $checkSessionServer.then(function(){ alert("session check returned!"); console.log("checkSessionServer is "+$checkSessionServer); return $checkSessionServer; }); …

2
解決後もJavaScript ES6プロミスが実行を続けるのはなぜですか?
promiseはresolve()またはreject()を実行できるものであることを理解しているので、resolveまたはrejectが呼び出された後も、promiseのコードが実行され続けることに驚いた。 すべての即時の関数実行を停止する、exitまたはreturnの非同期フレンドリーバージョンであることを解決または拒否することを検討しました。 次の例でresolveの呼び出し後にconsole.logが表示されることがある理由を誰かが説明できますか。 var call = function() { return new Promise(function(resolve, reject) { resolve(); console.log("Doing more stuff, should not be visible after a resolve!"); }); }; call().then(function() { console.log("resolved"); }); jsbin

5
JavaScriptのpromiseとasync awaitの違いは何ですか?
ECMAScript 6とECMAScript 7の機能を、モバイルとWebの両方のアプリケーションで(Babelのおかげで)すでに使用しています。 最初のステップは明らかにECMAScript 6レベルへの移行でした。私は多くの非同期パターン、約束(本当に有望です)、ジェネレーター(なぜ*記号なのかわからない)などを学びました。これらのうち、約束は私の目的にかなりよく適合しました。そして、私は自分のアプリケーションでそれらをかなり使用しています。 これは、私が基本的なpromiseを実装した方法の例/疑似コードです。 var myPromise = new Promise( function (resolve,reject) { var x = MyDataStore(myObj); resolve(x); }); myPromise.then( function (x) { init(x); }); 時間が経つにつれ、ECMAScript 7の機能に出会いました。その1つはASYNC、AWAITキーワードと関数です。これらを組み合わせると、すばらしい不思議が起こります。私は私の約束のいくつかをに置き換え始めましたasync & await。彼らはプログラミングスタイルに大きな価値を加えているようです。 繰り返しますが、これは私の非同期のawait関数がどのように見えるかの疑似コードです- async function myAsyncFunction (myObj) { var x = new MyDataStore(myObj); return await x.init(); } var returnVal = await myAsyncFunction(obj); …

3
Promise.all()。then()は解決しますか?
ノード4.xの使用。あなたが持っている場合はPromise.all(promises).then()、データを解決し、次にそれを渡すために適切な方法は何ですか.then()? 私はこのようなことをしたいです: Promise.all(promises).then(function(data){ // Do something with the data here }).then(function(data){ // Do more stuff here }); しかし、データを2番目に取得する方法がわかりません.then()。resolve(...)最初は使えません.then()。私はこれを行うことができると思いました: return Promise.all(promises).then(function(data){ // Do something with the data here return data; }).then(function(data){ // Do more stuff here }); しかし、それはそれを行う適切な方法のようには思えません...これに対する正しいアプローチは何ですか?

9
約束-約束を強制的にキャンセルすることは可能ですか
ES6 Promisesを使用してすべてのネットワークデータ取得を管理していますが、強制的にキャンセルする必要がある場合があります。 基本的に、シナリオは、リクエストがバックエンドに委任されるUIで先行入力検索を行い、部分的な入力に基づいて検索を実行する必要があるというものです。このネットワーク要求(#1)には少し時間がかかる場合がありますが、ユーザーは入力を続け、最終的に別のバックエンド呼び出し(#2)をトリガーします。 ここでは、当然、#2が#1よりも優先されるため、Promiseラッピングリクエスト#1をキャンセルしたいと思います。データレイヤーにすべてのPromiseのキャッシュが既にあるので、#2のPromiseを送信しようとしているときに、理論的にはそれを取得できます。 しかし、キャッシュからPromise#1を取得したら、どうすればキャンセルできますか? 誰かがアプローチを提案できますか?

8
Node.jsでのコールバックのPromiseへの置き換え
データベースに接続するシンプルなノードモジュールがあり、この関数など、データを受信するためのいくつかの関数があります。 dbConnection.js: import mysql from 'mysql'; const connection = mysql.createConnection({ host: 'localhost', user: 'user', password: 'password', database: 'db' }); export default { getUsers(callback) { connection.connect(() => { connection.query('SELECT * FROM Users', (err, result) => { if (!err){ callback(result); } }); }); } }; このモジュールは、別のノードモジュールから次のように呼び出されます。 app.js: import dbCon from './dbConnection.js'; dbCon.getUsers(console.log); …

2
Promise.resolveと新しいPromise(resolve)
私はbluebirdを使用していますが、同期関数をPromiseに解決する方法は2つありますが、両方の方法の違いはわかりません。スタックトレースが少し違うように見えるので、それらは単なるではありませんaliasよね? それで、好ましい方法は何ですか? 方法A function someFunction(someObject) { return new Promise(function(resolve) { someObject.resolved = true; resolve(someObject); }); } ウェイB function someFunction(someObject) { someObject.resolved = true; return Promise.resolve(someObject); }

1
決して解決された約束はメモリリークを引き起こしませんか?
私は持っています Promiseます。必要に応じてAJAXリクエストをキャンセルするために作成しました。しかし、そのAJAXをキャンセルする必要がないので、それを解決したことがなく、AJAXは正常に完了しました。 簡略化されたスニペット: var defer = $q.defer(); $http({url: 'example.com/some/api', timeout: defer.promise}).success(function(data) { // do something }); // Never defer.resolve() because I don't need to cancel that ajax. What happens to this promise after request? そのような約束を解決してメモリリークを引き起こしたことはありませんか?Promiseライフサイクルを管理する方法について何かアドバイスはありますか?

2
setTimeoutから約束をする方法
これは現実の問題ではなく、約束がどのように作成されるかを理解しようとしているだけです。 setTimeoutのように何も返さない関数を約束する方法を理解する必要があります。 私が持っていると仮定します: function async(callback){ setTimeout(function(){ callback(); }, 5000); } async(function(){ console.log('async called back'); }); の準備ができたasync後に戻ることができるプロミスをどのように作成setTimeoutしcallback()ますか? 私はそれをラップするとどこかに連れて行くと思っていました: function setTimeoutReturnPromise(){ function promise(){} promise.prototype.then = function() { console.log('timed out'); }; setTimeout(function(){ return ??? },2000); return promise; } しかし、これ以上は考えられません。

5
多くの約束を返し、他のことをする前にそれらすべてを待つ方法
非同期で処理を行うメソッドを呼び出すループがあります。このループはメソッドを何度も呼び出すことができます。このループの後に、すべての非同期処理が完了したときにのみ実行する必要がある別のループがあります。 だからこれは私が欲しいものを示しています: for (i = 0; i < 5; i++) { doSomeAsyncStuff(); } for (i = 0; i < 5; i++) { doSomeStuffOnlyWhenTheAsyncStuffIsFinish(); } 私は約束にあまり精通していないので、誰かが私がこれを達成するのを手伝ってくれるでしょうか? これが私のdoSomeAsyncStuff()振る舞いです: function doSomeAsyncStuff() { var editor = generateCKEditor(); editor.on('instanceReady', function(evt) { doSomeStuff(); // There should be the resolve() of the promises I think. }) } …

6
プロミスキャッチの再スローエラー
チュートリアルで次のコードを見つけました。 promise.then(function(result){ //some code }).catch(function(error) { throw(error); }); 私は少し混乱しています:catch呼び出しは何かを達成しますか?キャッチされたのと同じエラーをスローするだけなので、効果がないように思えます。これは、通常のtry / catchがどのように機能するかに基づいています。


9
約束から複数の値を適切に返すにはどうすればよいですか?
最近、特定の状況に何度か遭遇しましたが、適切に解決する方法がわかりませんでした。次のコードを想定します。 somethingAsync() .then( afterSomething ) .then( afterSomethingElse ) function afterSomething( amazingData ) { return processAsync( amazingData ); } function afterSomethingElse( processedData ) { } 私がアクセスしたいでしょう今どこ状況が生じる可能性があるamazingDataではafterSomethingElse。 明らかな解決策の1つはafterSomething、から配列またはハッシュを返すことです。これは、関数から返すことができる値は1つだけだからです。しかしafterSomethingElse、2つのパラメーターを受け入れて同様に呼び出す方法があるかどうか疑問に思っています。これは、文書化して理解するのがはるかに簡単なようです。 私がQ.spread望んでいるのと同じようなことをするがあるので、私はこの可能性についてだけ疑問に思っています。
86 javascript  promise  q 

3
それでは、if-elseを約束で処理する方法は?
場合によっては、promiseオブジェクトから戻り値を取得するときにthen()、値の条件に応じて、次のように2つの異なるプロセスを開始する必要があります。 promise().then(function(value){ if(//true) { // do something } else { // do something } }) 多分私はそれを次のように書くことができると思っています: promise().then(function(value){ if(//true) { // call a new function which will return a new promise object ifTruePromise().then(); } else { ifFalsePromise().then(); } }) しかし、これに関して、私は2つの質問があります: 新しいpromiseを開始してから、promiseでプロセスを開始するのが良い考えかどうかはわかりません。 最後に1つの関数を呼び出すために2つのプロセスが必要な場合はどうなりますか?それは彼らが同じ「ターミナル」を持っていることを意味します 私は元のチェーンを次のように保つために新しい約束を返そうとしました: promise().then(function(value){ if(//true) { // call a new function …

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.