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

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

7
プロミスチェーンで複数のキャッチを処理する
私はまだプロミスにかなり慣れておらず、現在はbluebirdを使用していますが、どのように対処すればよいかよくわからないというシナリオがあります。 たとえば、次のようなExpressアプリ内にプロミスチェーンがあります。 repository.Query(getAccountByIdQuery) .catch(function(error){ res.status(404).send({ error: "No account found with this Id" }); }) .then(convertDocumentToModel) .then(verifyOldPassword) .catch(function(error) { res.status(406).send({ OldPassword: error }); }) .then(changePassword) .then(function(){ res.status(200).send(); }) .catch(function(error){ console.log(error); res.status(500).send({ error: "Unable to change password" }); }); だから私が求めている行動は: IDでアカウントを取得します この時点で拒否された場合は、爆撃してエラーを返します エラーがなければ、ドキュメントをモデルに変換します データベースドキュメントでパスワードを確認する パスワードが一致しない場合、爆破して別のエラーを返します エラーがなければ、パスワードを変更します その後、成功を返します 他に問題が発生した場合は、500を返します したがって、現在のところ、キャッチはチェーンを停止しないようで、それは理にかなっているので、エラーに基づいてチェーンを特定のポイントで強制的に停止する方法があるのか​​、またはより良い方法があるのか​​と思います。の場合があるように、これを構造化して何らかの形の分岐動作を取得しif X do Y …

3
パラメーターをpromise関数に渡す方法
これはばかげた質問に思えるかもしれませんが、私はこのトピックの初心者です。私はノードjsのプロミスに取り組んでいます。そして、promise関数にパラメーターを渡したいのですが。しかし、私はそれを理解することができませんでした。 someModule.someFunction.then(username, password,function(uid) { /*stuff */ } そして関数は次のようなものです var someFunction = new Promise(username, password, function(resolve, reject) { /*stuff using username, password*/ if ( /* everything turned out fine */ ) { resolve("Stuff worked!"); } else { reject(Error("It broke")); } });

5
Angularのhttpのような静的データからObservableを作成する方法は?
私はこの方法を持つサービスを持っています: export class TestModelService { public testModel: TestModel; constructor( @Inject(Http) public http: Http) { } public fetchModel(uuid: string = undefined): Observable<string> { if(!uuid) { //return Observable of JSON.stringify(new TestModel()); } else { return this.http.get("http://localhost:8080/myapp/api/model/" + uuid) .map(res => res.text()); } } } コンポーネントのコンストラクタで、私は次のようにサブスクライブしています: export class MyComponent { testModel: TestModel; testModelService: …

4
Node JS Promise.allおよびforEach
非同期メソッドを公開する構造のような配列があります。asyncメソッドを呼び出すと、配列構造が返され、さらに多くのasyncメソッドが公開されます。この構造から取得した値を格納する別のJSONオブジェクトを作成しているので、コールバックでの参照の追跡に注意する必要があります。 私はブルートフォースソリューションをコーディングしましたが、より慣用的またはクリーンなソリューションを学びたいと思います。 パターンは、nレベルのネストに対して繰り返し可能である必要があります。 囲んでいるルーチンをいつ解決するかを決定するには、promise.allまたは同様の手法を使用する必要があります。 すべての要素が非同期呼び出しを行う必要があるとは限りません。したがって、ネストされたpromise.allでは、インデックスに基づいてJSON配列要素に単純に割り当てることはできません。それでも、ネストされたforEachでpromise.allのようなものを使用して、すべてのプロパティの割り当てが、含まれているルーチンを解決する前に行われていることを確認する必要があります。 Bluebird promise libを使用していますが、これは必須ではありません ここにいくつかの部分的なコードがあります- var jsonItems = []; items.forEach(function(item){ var jsonItem = {}; jsonItem.name = item.name; item.getThings().then(function(things){ // or Promise.all(allItemGetThingCalls, function(things){ things.forEach(function(thing, index){ jsonItems[index].thingName = thing.name; if(thing.type === 'file'){ thing.getFile().then(function(file){ //or promise.all? jsonItems[index].filesize = file.getSize();

4
約束から戻るthen()
私はこのようなjavascriptコードを持っています: function justTesting() { promise.then(function(output) { return output + 1; }); } var test = justTesting(); varテストでは常に未定義の値を取得しています。それは約束がまだ解決されていないからだと思います。約束から値を返す方法はありますか?

13
promiseのループを記述する正しい方法。
ループを正しく構築して、次のpromise呼び出しとチェーンされたlogger.log(res)が反復を通じて同期的に実行されるようにする方法は?(青い鳥) db.getUser(email).then(function(res) { logger.log(res); }); // this is a promise 私は次の方法を試しました(http://blog.victorquinn.com/javascript-promise-while-loopからの方法) var Promise = require('bluebird'); var promiseWhile = function(condition, action) { var resolver = Promise.defer(); var loop = function() { if (!condition()) return resolver.resolve(); return Promise.cast(action()) .then(loop) .catch(resolver.reject); }; process.nextTick(loop); return resolver.promise; }); var count = 0; promiseWhile(function() { return …

5
promiseチェーンでsetTimeoutを使用する
ここで私は約束に頭を回そうとしています。最初のリクエストで一連のリンクをフェッチします。次のリクエストで最初のリンクのコンテンツをフェッチしますが、次のプロミスオブジェクトを返す前に遅延を作りたいので、 setTimeout on it。しかし、次のJSONエラー(without setTimeout() it works just fine)が表示されます SyntaxError:JSON.parse:JSONデータの1行1列目の予期しない文字 なぜ失敗するのか知りたいのですが? let globalObj={}; function getLinks(url){ return new Promise(function(resolve,reject){ let http = new XMLHttpRequest(); http.onreadystatechange = function(){ if(http.readyState == 4){ if(http.status == 200){ resolve(http.response); }else{ reject(new Error()); } } } http.open("GET",url,true); http.send(); }); } getLinks('links.txt').then(function(links){ let all_links = (JSON.parse(links)); globalObj=all_links; return …
115 javascript  json  promise 

4
.json()がPromiseを返すのはなぜですか?
私はfetch()最近、APIをいじり回していて、少し風変わりなことに気づきました。 let url = "http://jsonplaceholder.typicode.com/posts/6"; let iterator = fetch(url); iterator .then(response => { return { data: response.json(), status: response.status } }) .then(post => document.write(post.data)); ; post.dataPromiseオブジェクトを返します。 http://jsbin.com/wofulo/2/edit?js,output ただし、次のように記述されている場合: let url = "http://jsonplaceholder.typicode.com/posts/6"; let iterator = fetch(url); iterator .then(response => response.json()) .then(post => document.write(post.title)); ; postObjectこれは、title属性にアクセスできる標準です。 http://jsbin.com/wofulo/edit?js,output だから私の質問は、なぜresponse.jsonオブジェクトリテラルでプロミスを返すのですか?

6
AngularJSのPromiseで成功/エラー/最終的に/キャッチを使用する
私は$httpAngularJsで使用していますが、返されたpromiseの使用方法とエラーの処理方法がわかりません。 私はこのコードを持っています: $http .get(url) .success(function(data) { // Handle data }) .error(function(data, status) { // Handle HTTP error }) .finally(function() { // Execute logic independent of success/error }) .catch(function(error) { // Catch and handle exceptions from success/error/finally functions }); これは良い方法ですか、それとももっと簡単な方法がありますか?

7
$ .when.apply($、someArray)は何をしますか?
私はDeferredsとPromisesについて読んでいて、出会い続けてい$.when.apply($, someArray)ます。私はこれが正確に何をするかについて少し不明確です、1行が正確に機能する(コードスニペット全体ではなく)との説明を探しています。ここにいくつかのコンテキストがあります: var data = [1,2,3,4]; // the ids coming back from serviceA var processItemsDeferred = []; for(var i = 0; i < data.length; i++){ processItemsDeferred.push(processItem(data[i])); } $.when.apply($, processItemsDeferred).then(everythingDone); function processItem(data) { var dfd = $.Deferred(); console.log('called processItem'); //in the real world, this would probably make an AJAX call. setTimeout(function() …

16
バニラECMAScript 6プロミスチェーンをキャンセルする
.thenJavaScript Promiseインスタンスのs をクリアする方法はありますか? QUnitの上にJavaScriptテストフレームワークを記述しました。フレームワークは、それぞれでテストを同期的に実行しPromiseます。(このコードブロックの長さで申し訳ありません。できる限りコメントを付けたので、退屈さが少なく感じられます。) /* Promise extension -- used for easily making an async step with a timeout without the Promise knowing anything about the function it's waiting on */ $$.extend(Promise, { asyncTimeout: function (timeToLive, errorMessage) { var error = new Error(errorMessage || "Operation timed out."); var res, // resolve() …

5
すべての約束が解決するのを待ちます
したがって、長さが不明な複数のプロミスチェーンがある状況にあります。すべてのチェーンが処理されたときに何らかのアクションを実行したいのですが。それは可能ですか?次に例を示します。 app.controller('MainCtrl', function($scope, $q, $timeout) { var one = $q.defer(); var two = $q.defer(); var three = $q.defer(); var all = $q.all([one.promise, two.promise, three.promise]); all.then(allSuccess); function success(data) { console.log(data); return data + "Chained"; } function allSuccess(){ console.log("ALL PROMISES RESOLVED") } one.promise.then(success).then(success); two.promise.then(success); three.promise.then(success).then(success).then(success); $timeout(function () { one.resolve("one done"); }, Math.random() …

4
JavaScript Promiseが解決するのを待ってから関数を再開するにはどうすればよいですか?
単体テストを行っています。テストフレームワークは、ページをiFrameに読み込み、そのページに対してアサーションを実行します。各テストを開始する前にPromise、iFrameのonloadイベントを呼び出すようresolve()に設定し、iFrameを設定しsrc、promiseを返すを作成します。 したがって、を呼び出すだけloadUrl(url).then(myFunc)で、ページがロードされるのを待ってから何を実行することもできmyFuncます。 この種のパターンは、主にDOMへの変更を許可するために(URLのロードだけでなく)、テストのあちこちで使用されています(たとえば、ボタンのクリックを模倣し、divが非表示になって表示されるのを待ちます)。 この設計の欠点は、数行のコードを含む匿名関数を常に記述していることです。さらに、回避策(QUnit's assert.async())がありますが、プロミスを定義するテスト関数は、プロミスが実行される前に完了します。 から値を取得する方法、Promiseまたは.NETのように解決されるまで待機(ブロック/スリープ)する方法があるかどうか疑問に思っていますIAsyncResult.WaitHandle.WaitOne()。私はJavaScriptがシングルスレッドであることを知っていますが、それが関数が生成できないことを意味しないことを願っています。 本質的に、正しい順序で結果を吐き出すために以下を取得する方法はありますか? function kickOff() { return new Promise(function(resolve, reject) { $("#output").append("start"); setTimeout(function() { resolve(); }, 1000); }).then(function() { $("#output").append(" middle"); return " end"; }); }; function getResultFrom(promise) { // todo return " end"; } var promise = kickOff(); var result = getResultFrom(promise); $("#output").append(result); <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> …

3
Angularjs $ q.all
angularjsに$ q.allを実装しましたが、コードを機能させることができません。これが私のコードです: UploadService.uploadQuestion = function(questions){ var promises = []; for(var i = 0 ; i < questions.length ; i++){ var deffered = $q.defer(); var question = questions[i]; $http({ url : 'upload/question', method: 'POST', data : question }). success(function(data){ deffered.resolve(data); }). error(function(error){ deffered.reject(); }); promises.push(deffered.promise); } return $q.all(promises); } そして、これがサービスを呼び出す私のコントローラーです: uploadService.uploadQuestion(questions).then(function(datas){ …
105 angularjs  promise  q 

2
漁獲の前と後の配置
.catch入れ子になった約束でBEFOREとAFTERの違いを理解するのに苦労します。 代替1: test1Async(10).then((res) => { return test2Async(22) .then((res) => { return test3Async(100); }).catch((err) => { throw "ERROR AFTER THEN"; }); }).then((res) => { console.log(res); }).catch((err) => { console.log(err); }); 代替2: test1Async(10).then((res) => { return test2Async(22) .catch((err) => { throw "ERROR BEFORE THEN"; }) .then((res) => { return test3Async(100); }); }).then((res) …

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