如何在promise join中调用新对象

时间:2015-08-26 15:08:11

标签: javascript promise bluebird

我使用promise join,我需要使用从readFile发送数据到myFacade(src),我的外观将obj发送到getA,后者将被发送到arg [0] ......

run = function (filePath) {
    return Promise.join(
        fs.readFileAsync(filePath, 'utf8')
            .then(myFacade)
            .then(getA),
        users.getUsersAsync(usersObj)
            .then(users.modifyRec.bind(null, process.env.us))
    ).then(function (args) {
            return runProc('run', args[0], args[1]);
....

为了使这项工作无法做到,你应该做一些像

这样的事情
  var parsed = new MyFacade(str);
   var attribute = parsed.getA()

这是应该被称为

的代码
var yaml = require('yamljs');

function MyFacade(src) {
  this.data = yaml.parse(src);
}

MyFacade.prototype = {

  getA: function () {
    return this.data.def_types.web;
  },

  getB: function () {
    return this.data.conars;
  }

};

module.exports = MyFacade;

如何使其与上述承诺链一起使用?

2 个答案:

答案 0 :(得分:1)

您正在使用

http://localhost:4200/tests

这意味着"在前一个承诺的结果上调用函数.then(getA) 。"但是你没有功能getA;前一个承诺的结果有一个方法getA。你想要call

getA

至于

.call('getA')

有两种选择。一个是添加到构造函数的常见事情:

.then(myFacade)

这允许在没有function MyFacade(src) { if(!(this instanceof MyFacade)) return new MyFacade(src); this.data = yaml.parse(src); } 的情况下调用构造函数。或者,您可以将匿名函数传递给new

then

答案 1 :(得分:1)

只需准确传递您在没有承诺的情况下使用的代码作为回调:

return Promise.join(
    fs.readFileAsync(filePath, 'utf8')
        .then(function(str) {
            var parsed = new MyFacade(str);
            var attribute = parsed.getA()
            return attribute;
        }),
    users.getUsersAsync(usersObj)
        .then(users.modifyRec.bind(null, process.env.us)),
function(attr, rec) {
    return runProc('run', attr, rec);
});