私はプロミス(私が共通のテーマ、私が知っている)の周りに頭をラップしようとしています。私は基本的なアイデアを持っていますが、私はそれらを実装するのに問題があります。プロミスコールの結果に基づいてオブジェクトを構築する
私は、ディレクトリの内容に基づいて一連の関数を公開するオブジェクトを作成しようとしています。私はfsライブラリを約束するためにブルーバードを使用しています。次に、dirのファイルを読み込み、オブジェクトをビルドして、結果を返します。
var Promise = require('bluebird'),
fs = Promise.promisifyAll(require('fs'));
var services = {};
return fs.readdirAsync('./path/to/file/')
.each(function (filename) {
//trim off the file extension and assign the export function
services[filename.replace(/\.[^/.]+$/, "")] = function(request) {
request.esbOperation = filename;
otherFunctionCall(request);
}
})
.then(function() {
return {services: services};
})
.catch(function(err){
console.log(err);
});
私は物事の多様性を試してみたが、返されたオブジェクトは、通常、次のようになります。
Promise {
_bitField: 167772160,
_fulfillmentHandler0: undefined,
_rejectionHandler0:
{ services:
{ function1: [Function],
function2: [Function],
function3: [Function],
},
_promise0: undefined,
_receiver0: undefined }
私は履行ハンドラ内で結果を得るにはどうすればよいですか? プロミスオブジェクトの代わりに解決されたオブジェクトを返すようにするにはどうすればよいですか(さまざまな場所で解決/拒否を試みましたが、間違っています)
あなたにはありません。あなたは約束を返します(これは、あなたが見ているものです、既に働いています)。それが彼らのために作られたものです。将来計算される結果を即座に返すことはできません。 – Bergi
@Bergiなぜ拒否ハンドラにはありますか? – GForce
@GForceあなたのオブジェクトが '_rejectionHandler0'プロパティに格納されている理由は言えませんでしたが、プロミスの内部プロパティから値を取得しようとしてはいけません。あなたは '.then()'および/または '.catch()'を呼び出してそれを操作する必要があります。 – JLRishe