-2

Вот в модуле есть функция, внутри нее уже метод вызывается из библиотеки, который с сервака информацию возвращает..

exports.login = function(user)
{    
    return auth.login(
        user.username,
        user.password,
        function (data) {
            console.dir(data);
            return true;
        },
        function(error){
            console.dir(error);
           return false;
        });
    }

Далее подключается этот модуль и вызывается эта функция в условии

if (ap.login(user)==true){..}

И так как это выполняется асинхронно, return не ждет пока данные с сервера придут и возвращается undefined сначала , а потом спустя время ответ..

Вопрос такой: Как переписать код чтобы заработало?

Обернуть в Promise это?

Или как то по-другому нужно делать?

Если можете, напишите код., правильный..для node.js v6.9.1

LS2010
  • 551

1 Answers1

1

Как решить задачу с помощью функций обратного вызова и обещаний все итак знают. Я же покажу, как ее решить с помощью асинхронной магии ES2017.

Код модуля:

export async function login (user) {
    return new Promise((resolve) => {
        auth.login(
            user.username,
            user.password,
            (data) => {resolve(true)},
            (error) => {resolve(false)}
        );
    });
}

Где-то в другом модуле:

import {login} from 'your_module';

const action = async () => {
    if (await login(user)) {
        // ...
    }
}
Dmitriy Simushev
  • 17,999
  • 5
  • 49
  • 85
  • Эта "магия" работает только в седьмой версии, а она не LTS. Когда выпустят стабильную восьмую (к осени, видимо), тогда и будем колдовать. – Yuriy Po Apr 20 '17 at 10:11
  • Я это знаю. Правильный код для LTS есть в вопросе, чьим дубликатом является этот. Писать его еще и сюда - считаю лишней тратой времени и сил. – Dmitriy Simushev Apr 20 '17 at 10:15
  • @DmitriySimushev так ведь про async и await там тоже есть... – Pavel Mayorov Apr 20 '17 at 10:19
  • @PavelMayorov, ну вот зачем вы портите педагогический момент?) – Dmitriy Simushev Apr 20 '17 at 10:20
  • @PavelMayorov, к тому же, я отвечаю на прямой вопрос "Если можете, напишите код., правильный.." ;) – Dmitriy Simushev Apr 20 '17 at 10:21