用异步等待调用其他模块

时间:2018-05-07 09:52:44

标签: node.js

我正在使用节点js服务器开发一个Web应用程序。我陷入了一个地方,我将从其他模块中获取一些数据。它不能很好地工作。这是代码。

Dashboard.js的开头,我写了这个。

var auth = require('./auth');

Dashboard.js API

.get('/getAllResturants', async function (req, res, next) {

        console.log('LOCATION A 001');
        var testValue = await auth.testCalling(2);
        console.log('LOCATION A 002');       
        console.log(testValue);
        console.log('LOCATION A 003');

        global.restaurant.findAll().then(restaurant => {
            console.log('LOCATION A 004');
            res.json(restaurant);            
        });       

    })

auth.js文件

module.exports = {

    testCalling: async function (id) {
        console.log('LOCATION B 001');
         global.restaurant.findOne({
            where: { id: id }
        }).then(function (record) {
            console.log('LOCATION B 002');          
            return record;
        });
    },

};

只是 testValue 没有任何价值。 (我需要的是从它获取一个值并根据值进一步处理。)testValue在日志中显示为 undefined 。同样在执行时,日志显示如下。我使用异步,等待程序,似乎它没有正常工作。

LOCATION A 001
LOCATION B 001
LOCATION A 002
undefined
LOCATION A 003
LOCATION B 002
LOCATION A 004

请指点我在这个程序中找到问题。

2 个答案:

答案 0 :(得分:1)

我猜你不是在想async/await function。等待必须是一个承诺。我举个例子。

const sleep = time => new Promise(resolve => {
  setTimeout(() => resolve(true), time)
});

async function run(time) {
  console.log('---start---');
  const bool = await sleep(time);
  console.log(`---end ${bool}---`);
}

run(3000);

答案 1 :(得分:0)

您需要从http://your-site.com/yourpath电话中退回承诺:

findOne

如果没有module.exports = { testCalling: async function (id) { console.log('LOCATION B 001'); return global.restaurant.findOne({ where: { id: id } }).then(function (record) { console.log('LOCATION B 002'); return record; }); }, }; ,该函数将回退到return的默认返回值。