将回调转换为承诺

Convert call back to promise

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

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

有什么方法可以将这段代码转换为 promise 吗?

你想要做的是将 ds.connector.execute 包裹在 Promise 中,然后将 return 包裹在 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));

你可以做一个Promise.promisify()

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