Как получить результаты из петлевого запроса, используя find? - PullRequest
0 голосов
/ 21 сентября 2018

Я использую nodejs.Использование библиотеки loopback-connector для подключения к db2 db.

Я пытаюсь создать задание cron для выполнения определенной задачи.В этой задаче я предполагаю запросить базу данных на основе определенных критериев, в данном случае invCode, а затем выполняет некоторую постобработку и затем обновляет обратно до базы данных.

Вопрос 1:

Это правильный способ получения результата запроса?

Вопрос 2:

Мой resultList возвращает результаты Promise.Как я могу получить фактические значения?

'use strict';

var loopback = require('loopback');
var boot = require('loopback-boot');

const cron = require("node-cron");

var app = module.exports = loopback();

app.start = function() {

    // schedule tasks to be run on the server
    var job1 = cron.schedule("* * * * * * ", function() {
        console.log("---------------------");
        console.log("Running Cron Job 1");

        var Inventory = app.models.Inventory;

        var resultList = Inventory.find({where: {invCode: 'A10231'}})
        .then(function(result){
            return resultList = result;
        })
        .catch(function(err){
            return err;
        });

        console.log("outside!");
        console.log("resultList: " + resultList.value );

    });

    job1.start();

    // start the web server
    return app.listen(function() {
        app.emit('started');

        var baseUrl = app.get('url').replace(/\/$/, '');

        console.log('Web server listening at: %s', baseUrl);

        if (app.get('loopback-component-explorer')) {
            var explorerPath = app.get('loopback-component-explorer').mountPath;
            console.log('Browse your REST API at %s%s', baseUrl, explorerPath);
        }
    });
};

// Bootstrap the application, configure models, datasources and middleware.
// Sub-apps like REST API are mounted via boot scripts.
boot(app, __dirname, function(err) {
    if (err) throw err;

    // start the server if `$ node server.js`
    if (require.main === module) {
        app.start();      
    }
});

1 Ответ

0 голосов
/ 25 сентября 2018

Метод find является асинхронным и возвращает Обещание.На самом деле, ваш код

console.log("resultList: " + resultList.value );

всегда выполняется перед этим блоком:

Inventory.find({where: {invCode: 'A10231'}})
  .then(function(err, inventories) {
    // inventories is a list of Inventory objects, use your data HERE
  })
...