NodeJS响应异步

时间:2016-10-29 04:32:27

标签: node.js express

我刚开始使用NodeJS进行编码,而且我有一个问题。我被困在这个地方。我知道NodeJS是异步的,但每当我做一个' GET' /我得到一个空白的回复。

    /* GET home page. */
    router.get('/', function(req, res, next) {
        var tenantID = 1; //Hardcoded TODO: Remove this value later
        var dwelltest = dwellTimeBucketModel.fetchFromDB(tenantID); 
          //I have a model in which I do all the DB calls (Cleaner to seperate?)
        res.json({dwell: dwelltest}); //Send response back
    }

现在,每次我这样做,我的回复都会被发送出去。 (我知道这是由于异步行为)。我不确定如何让它工作?

我试过这样做:

var dwellResult = new Promise(function(resolve, reject){
     dwellTimeBucketModel.fetchFromDB(tenantID);
 });

dwellResult.then(function (result) {
    console.log(result);
    res.json({dwell: result})
}).catch(function (error) {
    console.error(error);
})

但是回复从未发送过。我不确定我做错了什么?

请告知我是否遵循了正确的做法? (或标准?)

由于

2 个答案:

答案 0 :(得分:3)

将决心添加到承诺

var dwellResult = new Promise(function(resolve, reject){
   resolve(dwellTimeBucketModel.fetchFromDB(tenantID));
});

答案 1 :(得分:1)

如果你看一下promise语法,那就是 -

var p = new Promise(function(resolve, reject) {     
    // Do an async task async task and then...

    if(/* good condition */) {
        resolve('Success!');
    }
    else {
        reject('Failure!');
    }
});

p.then(function(response) { 
    /* do something with the result */
}).catch(function() {
    /* error :( */
})

以下是两篇更详细的研究文章。