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

Bluebirdは、革新的な機能とパフォーマンスに重点を置いた、クライアントとサーバーのJavaScript用のフル機能のpromiseライブラリです。

19
既存のコールバックAPIをpromiseに変換するにはどうすればよいですか?
promiseを操作したいのですが、次のような形式のコールバックAPIがあります。 1. DOMロードまたは他の1回限りのイベント: window.onload; // set to callback ... window.onload = function() { }; 2.プレーンコールバック: function request(onChangeHandler) { ... } request(function() { // change happened ... }); 3.ノードスタイルコールバック( "nodeback"): function getStuff(dat, callback) { ... } getStuff("dataParam", function(err, data) { ... }) 4.ノードスタイルのコールバックを含むライブラリ全体: API; API.one(function(err, data) { API.two(function(err, data2) { API.three(function(err, …

17
.then()チェーンで以前のpromise結果にアクセスするにはどうすればよいですか?
私はに私のコードを再構築してきた約束、そして素晴らしい長い建てフラット約束チェーンを複数からなる、.then()コールバック。最後に、いくつかの複合値を返し、複数の中間promise結果にアクセスする必要があります。ただし、シーケンスの中央からの解決値は、最後のコールバックのスコープ内にありません。それらにアクセスするにはどうすればよいですか? function getExample() { return promiseA(…).then(function(resultA) { // Some processing return promiseB(…); }).then(function(resultB) { // More processing return // How do I gain access to resultA here? }); }

2
明示的なプロミスコンストラクションアンチパターンとは何ですか?
私は次のようなことをするコードを書いていました: function getStuffDone(param) { | function getStuffDone(param) { var d = Q.defer(); /* or $q.defer */ | return new Promise(function(resolve, reject) { // or = new $.Deferred() etc. | // using a promise constructor myPromiseFn(param+1) | myPromiseFn(param+1) .then(function(val) { /* or .done */ | .then(function(val) { d.resolve(val); | resolve(val); }).catch(function(err) …

10
コールバックだけを約束しませんか?
私はJavaScriptを数年開発しており、約束についての大騒ぎをまったく理解していません。 私がすることはすべて変更であるようです: api(function(result){ api2(function(result2){ api3(function(result3){ // do work }); }); }); とにかく、私はasyncのようなライブラリを使用できます: api().then(function(result){ api2().then(function(result2){ api3().then(function(result3){ // do work }); }); }); どちらがより多くのコードであり、読みにくくなります。ここでは何も得られませんでしたが、突然魔法のように「フラット」になったわけでもありません。言うまでもなく、物事を約束に変換する必要があります。 では、ここでの約束についての大騒ぎは何ですか?


1
ES6のプロミスがあるため、QやBlueBirdなどのプロミスライブラリを使用する理由はまだありますか?[閉まっている]
休業。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善してみませんか?この投稿を編集して、事実と引用で回答できるように質問を更新してください。 4年前休業。 この質問を改善する Node.jsがpromiseのネイティブサポートを追加した後も、QやBlueBirdなどのライブラリを使用する理由はまだありますか? たとえば、新しいプロジェクトを開始していて、このプロジェクトでこれらのライブラリを使用する依存関係がないと仮定すると、そのようなライブラリを使用する理由は本当にないと言えますか?

7
.then(成功、失敗)はいつ約束のアンチパターンと見なされますか?
ブルーバードプロミスFAQを見てみましたが、これ.then(success, fail)はアンチパターンであると述べています。トライアンドキャッチについては説明がよくわかりません。これの次の何が問題になっていますか? some_promise_call() .then(function(res) { logger.log(res) }, function(err) { logger.log(err) }) 例は正しい方法として次のことを示唆しているようです。 some_promise_call() .then(function(res) { logger.log(res) }) .catch(function(err) { logger.log(err) }) 違いは何ですか?

1
Bluebirdのutil.toFastProperties関数はどのようにしてオブジェクトのプロパティを「高速」にしますか?
Bluebirdのutil.jsファイルでは、次の機能があります。 function toFastProperties(obj) { /*jshint -W027*/ function f() {} f.prototype = obj; ASSERT("%HasFastProperties", true, obj); return f; eval(obj); } 何らかの理由で、return関数の後にステートメントがありますが、なぜそこにあるのかはわかりません。 同様に、作者がこれに関するJSHint警告を沈黙させたので、それは意図的であるようです: 「return」の後に到達できない「eval」。(W027) この関数は正確に何をしますか?util.toFastProperties本当に「速く」オブジェクトのプロパティを作りますか? BluebirdのGitHubリポジトリを検索して、ソースコードのコメントや問題のリストの説明を探しましたが、何も見つかりませんでした。

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 …

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 …

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) …

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