Преобразование обратного звонка в обещание

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

let ds = app.datasources.ace_db
ds.connector.execute(sql,[],(err, data ) => {
   console.log('datalogger', data);
});

Есть ли способ преобразовать этот кусок кода в обещание?


person Ginto Joseph    schedule 21.11.2017    source источник
comment
Покажите, что вы пробовали, что не работает   -  person charlietfl    schedule 21.11.2017
comment
возможный дубликат. проверьте этот вопрос stackoverflow.com/ вопросы/28432401/   -  person vader    schedule 21.11.2017
comment
Связанная проблема с github о поддержке Promise в LoopBack.   -  person Ivan Schwarz    schedule 21.11.2017
comment
вы также можете использовать асинхронный пакет npm ссылка   -  person Daniel    schedule 21.11.2017


Ответы (2)


Вы можете сделать Promise.promisify()

let p = Promise.promisify(ds.connector.execute);
p(sql, []).then(...)
person Vasan    schedule 21.11.2017

Что вы хотите сделать, так это обернуть свой ds.connector.execute в Promise и вернуть этот Promise следующим образом:

const dsConnectorPromise = function(sql, arr) {

    let p = new Promise((resolve, reject) => {

        ds.connector.execute(sql, arr, (err, data) => {

            if(err) reject(err);
            else resolve(data);
        });
    });

    return p; // return promise
};

Затем вы можете использовать dsConnectorPromise следующим образом:

dsConnectorPromise(sql, []).then(data => {

    console.log(data);

}).catch(err => console.log(err));
person Christian Santos    schedule 21.11.2017
comment
или вы можете просто сделать return new Promise((resolve, reject)... без назначения переменной p вообще - person nicholaswmin; 21.11.2017