如何将旧的JavaScript API转换为Promise

时间:2018-10-08 17:49:32

标签: javascript promise es6-promise

我有一个类似这样的AWS呼叫:

ecs.describeServices(params, function(err, data) {
   if (err) {
      return { data: '',success: false };
   } else {
      return { data: 'whohoo',success: true};
   }
});

这是一种需要返回一个承诺的方法,该承诺可以解析为我的返回对象。

我一直在尝试这种类型的解决方案,但无法弄清楚。

        var keepsHisWord;
        keepsHisWord = true;
        var promise1 = new Promise(function(resolve, reject) {
            if (keepsHisWord) {
                resolve({ mytest: "mytest101" });
            } else {
                reject("The man doesnt want to keep his word");
            }
        });

编辑: 工作。感谢两个发帖的人。这确实很有帮助。并想知道为什么这个问题不赞成。我首先做了很多研究。我想选民不是那么聪明。

            var promise1 = function(params) {
            return new Promise(function(resolve, reject) {
                ecs.describeServices(params, function(err, data) {
                    if (err) {
                        resolve({
                            error: "my error"
                        });
                    } else {
                        resolve({
                            runningCount: data.services[0].runningCount,
                            pendingCount: data.services[0].pendingCount,
                            status: data.services[0].status,
                            desiredCount: data.services[0].desiredCount,
                            createdAt: data.services[0].desiredCount,
                            events: data.services[0].events
                        });
                    }
                });
            });
        };
        return promise1(params);

2 个答案:

答案 0 :(得分:1)

将您的服务电话变成承诺:

promiseFunc = function(params) {


    return new Promise(function(resolve,reject){

        ecs.describeServices(params, function(err, data) {
            if (err) {
                resolve({ data: '',success: false });
            } else {
                reject({ data: 'whohoo',success: true});
            }
        });

    })

}

然后使用它:

 promiseFunc(params).then(x => {})

答案 1 :(得分:0)

从节点8开始,有一个util.promisify函数,正是该函数

var util = require('util');
var describeServices = util.promisify(ecs.describeServices);
describeServices(params)
    .then()
    .catch()

您还可以在Internet上找到此功能的许多实现。