7

I'm using NodeJS with Express and using Bluebird for promises. I'm trying to promisify app object as below but once promisified functions always throw errors. Part of the code is below:

var express = require('express'),
    app = express(),
    bodyParser = require('body-parser'),
    Promise = require("bluebird");

    app.postAsync = Promise.promisify(app.post);

    app.postAsync('/api/v1/users/update').then(function(req, res, next) {
    // never gets here
    })
        .catch(function(err) {
            console.log("doh!!!"); 
        });

I tried to promisifyAll with same effect. Why is it failing and is there any way to promisify post/get?

4

1 に答える 1

19

あなたは本当にこれをしたくありません。promise は、これに対する間違った抽象化です。

promise は、1 つの最終的な操作の結果を表します。promise はその状態を 1 回しか変更できないため、正しく promisify できたとしてもapp.post、1 つのクライアントに 1 回しかサービスを提供できません。

Promise は素晴らしい抽象化ですが、これは Promise が解決しようとする問題ではありません。代わりに、Promise を使用した興味深い抽象化に興味がある場合は、kriskowal (Q の作成者) の Q-IO または応答する Promise を返す Promise ルーターの 1 つを確認できますが、ハンドラー自体は複数回呼び出されます。

私はこれを十分に強調することはできません.Promiseは素晴らしい抽象化ですが、すべての同時実行の問題を解決したり解決しようとしたりするわけではありません.

于 2014-07-17T08:17:09.117 に答える