将回拨转换为承诺

时间:2017-11-21 05:03:58

标签: javascript loopback

我正在尝试将一个loopback回调函数转换为promise,但我无法转换它。代码是

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

有没有任何方法可以将这种代码的平衡转换为承诺?

2 个答案:

答案 0 :(得分:3)

您要做的是将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));

答案 1 :(得分:1)

你可以做Promise.promisify()

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