2016-04-25 15 views
0

データを取得する関数です。レンダリングテンプレートのチェーンが約束します

データを取得して取得します。いくつかのコードを省略しました。

exports.index = function(req, res){ 

    database.executeSQL('SELECT 1 FROM DUAL', [] , {}) 

    .then(function(result) { 
     res.render('index' , { TITLE : 'Lorem Ipsum Blog' }); 
    }) 

    .catch(function(err) { 
     next(err); 
    }); 
}; 

マイindexコントローラが私のindexルートで使用される機能を使用しています

function executeSQL(sql, bindParams , options) { 
    return new Promise(function(resolve, reject) { 
    ... 
    resolve(result); 
    }); 
} 

コントローラ。

少なくとも2回はexecuteSQL関数を呼び出す必要があります。両方の作業が完了した後で、res.renderに電話して、私が取り出したデータを送信したいと思います。

どうすればチェーン化できますか? チェーン化する必要がありますか?私はそれらを非同期的に実行できますか?両方が完了したら、私はres.renderに電話します。

+3

? – Rayon

+0

@RayonDabre result1でconsole.logを実行すると、undefinedが返されます。私のレンダー機能はこれら2つの約束から結果を得ていません。 – Paran0a

+0

私の悪い...これを参照してください:https://jsfiddle.net/rayon_1990/Lson6f62/1/ – Rayon

答えて

1

使用Promise.all,Promise.all(iterable)メソッドは、iterable引数のすべての約束が解決されたときに解決する約束を返します。 `Promise.all(ARR).then`についてどのように

function executeSQL(sql, bindParams, options) { 
 
    return new Promise(function(resolve, reject) { 
 
    resolve(result); 
 
    }); 
 
} 
 
exports.index = function(req, res) { 
 
    var pro1 = database.executeSQL('SELECT 1 FROM DUAL', [], {}); 
 
    var pro2 = database.executeSQL('SELECT 1 FROM DUAL', [], {}); 
 
    Promise.all([pro1, pro2]).then(function(result) { 
 
    console.log(result); //result will be an array 
 
    res.render('index', { 
 
     TITLE: 'Lorem Ipsum Blog' 
 
    }); 
 
    }).catch(function(err) { 
 
    next(err); 
 
    }); 
 
};

関連する問題