链接承诺时丢失类上下文

时间:2017-02-01 12:11:13

标签: javascript node.js ecmascript-6 this es6-promise

建议重复不足以作为答案。 link是更好的答案。并且匹配@deceze回复

我是从.net转换到节点。因此,我喜欢es6提供的语法糖。在我的一个复杂的重构中,我遇到了一个范围问题。

我从课堂内回复我的承诺。我将一些PolicyMapper.mapDao()代码重构为另一个类函数(mapJSONtoDAO)。单元测试没有问题。与其他承诺链接时出现问题。 this.mapJSONtoDAO()变得不确定。

route.js - >

const policyService = new PolicyService();
const policyMapper = new PolicyMapper();
const policyMapPromise = policyService.getPolicy(req.body.policyNumber, office)
    .then(policyMapper.mapDao, next);

PolicyMapper类 - >

class PolicyMapper {
    mapDao(soapResponse) {
        return new Promise((resolve, reject) => {

            xml2js.parseString(soapResponse[config.responseProperty], {}, (error, json) => {
                resolve(this.mapJSONtoDAO(json));
            });
        });
    }

    mapJSONtoDAO(json) {
        let policyDAO = new PolicyDAO();
        policyDAO.givenName = json["policy-response"]["given-name"]
        return policyDAO;
    }
}

route.js的下面重构保护了类和promise之间的范围关联。是否有一种简单的方法来补充这一点。我真的希望我的代码对于维护代码的任何工程师来说都很简单。

const policyService = new PolicyService();
const policyMapper = new PolicyMapper();
const policyMapPromise = policyService.getPolicy(req.body.policyNumber, office)
    .then((soapResponse) => {
        return policyMapper.mapDao(soapResponse)
    }, next);

0 个答案:

没有答案