我使用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;
如何使其与上述承诺链一起使用?
答案 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);
});