0

Народ! )
Кто нибудь может обьяснить почему при вызове вот такого кода:

console.time('test');
var pgp = require('pg-promise')(/*options*/);

var cn = {
    host: 'localhost', // server name or IP address;
    port: 5432,
    database: 'trading_database_eur_usd',
    user: 'postgres',
    password: '7256'
};

var db = pgp(cn); // database instance;

// select and return user name from id:

var promise = new Promise(function(resolve, reject) {

db.any('SELECT * FROM eur_usd WHERE primary_key = 4623209;')
    .then(user => {
        resolve(user);
    })
    .catch(error => {
        reject(console.log(error)); // print the error;
    });

});

module.exports = { db: promise .then( result => { // первая функция-обработчик - запустится при вызове resolve result; // result - аргумент resolve console.log(result); }, error => { // вторая функция - запустится при вызове reject console.log(error); // error - аргумент reject } ) };

console.timeEnd('test');

В консоли выводится результат:

"test: 103.301ms
[ { ticket: 'EURUSD',
    year_month_day: '20030505',
    hour_min_sec: '030000',
    open_price: '1.12161',
    high_price: '1.12209',
    low_price: '1.12161',
    close_price: '1.12209',
    volume: 561,
    primary_key: 4623209 } ]"

Но! Если анализировать код через дебаггер - то получается противоположенный(как по мне) итог:

введите сюда описание изображения

Вопрос:
Почему это проиcходит?

P.S. Если вызвать вышеописанный код(без консоли лог) из другой страницы:

const http = require('http');
const port = 2000;
const m = require("../database/database.js");

const requestHandler = (request, response) => { response.writeHead(200); console.log(request.method); console.log(request.headers); console.log(request.url); response.write('hi'); response.end(); };

const server = http.createServer(requestHandler);

server.listen(port, (err) => { if (err) { return console.log('something bad happened', err) }

console.log(m);

});

То вывод будет следующим:

{ db: Promise { <pending> } }



Конкретно на этих 3-х выводах(2 консоли + 1 дебаггер) я совсем запутался в плане понимания работы методов промисов - почему это происходит именно таким образом.
Если перефразировать:
То можно ли не меняя эти 2 страницы кода кардинально - заставить все таки вывести из второй страницы результат который по идее должен отдавать промис? (т.е. то что выводит в первом примере консоль лог - мне необходимо получить на второй странице и например вывести это в консоль лог уже там.)

  • чем данный вопрос отличается от предыдущего? – Grundy Nov 11 '18 at 15:45
  • туда нельзя добавить вопрос в таком формате. (нет кнопки 'ответа на вопрос') – Mikhail Krivosheev Nov 11 '18 at 15:50
  • не понял. Если хочешь задать отдельный вопрос, зачем тебе кнопка ответа? – Grundy Nov 11 '18 at 15:53
  • а каким образом можно тогда задать вопрос еще с поддержкой вложенного кода и что бы мозги себе не ломать т.к. это сделано в разделе добавить комментарий? – Mikhail Krivosheev Nov 11 '18 at 15:54
  • Никаким, это делается просто отдельным вопросом. Либо можно отредактировать уже существующий вопрос. Но у тебя два вопроса, по сути, одинаковые: ты хочешь узнать, как дождаться окончания асинхронной функции. В вопросе дубликате - это описано. – Grundy Nov 11 '18 at 15:56
  • там совсем другой пример качественно - он полностью убивает структуру этого примера. Это не дает возможность понять механику процесса.. Это и так отдельный вопрос. – Mikhail Krivosheev Nov 11 '18 at 15:57
  • По поводу картинки в этом вопросе: debugger делает вывод до того, как Promise завершился, поэтому выводит состояние pending, а так как состояние pending, никакого значения быть не может. – Grundy Nov 11 '18 at 15:58

0 Answers0