【问题标题】:Convert call back to promise将回调转换为承诺
【发布时间】:2018-05-04 11:20:56
【问题描述】:

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

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

有没有什么方法可以将这种代码的和平转换为承诺?

【问题讨论】:

标签: javascript loopback


【解决方案1】:

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

【讨论】:

  • 或者你可以只做return new Promise((resolve, reject)...而不分配给p变量
【解决方案2】:

你可以做一个Promise.promisify()

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

【讨论】:

    猜你喜欢
    • 2018-08-08
    • 2020-06-02
    • 2017-07-07
    • 1970-01-01
    • 1970-01-01
    • 2015-10-16
    • 1970-01-01
    • 2022-12-19
    相关资源
    最近更新 更多