如何在 promise join 中调用新对象
How to call to new object in promise join
我使用 promise join,我需要使用将数据从 readFile 发送到 myFacade (src),我的 facade 将 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;
如何让它与上面的承诺链一起工作?
您正在使用
.then(getA)
意思是"call the function getA
on the result of the previous promise."但是你没有函数getA
;先前承诺的结果有一个方法getA
。你想要 call
:
.call('getA')
至于
.then(myFacade)
有两种选择。一个是添加到构造函数中的常见事物:
function MyFacade(src) {
if(!(this instanceof MyFacade)) return new MyFacade(src);
this.data = yaml.parse(src);
}
这允许在没有 new
的情况下调用构造函数。或者,您可以将匿名函数传递给 then
:
.then(function(str) {
return new MyFacade(str);
})
只需准确传递您在没有承诺的情况下使用的代码作为回调:
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);
});
我使用 promise join,我需要使用将数据从 readFile 发送到 myFacade (src),我的 facade 将 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;
如何让它与上面的承诺链一起工作?
您正在使用
.then(getA)
意思是"call the function getA
on the result of the previous promise."但是你没有函数getA
;先前承诺的结果有一个方法getA
。你想要 call
:
.call('getA')
至于
.then(myFacade)
有两种选择。一个是添加到构造函数中的常见事物:
function MyFacade(src) {
if(!(this instanceof MyFacade)) return new MyFacade(src);
this.data = yaml.parse(src);
}
这允许在没有 new
的情况下调用构造函数。或者,您可以将匿名函数传递给 then
:
.then(function(str) {
return new MyFacade(str);
})
只需准确传递您在没有承诺的情况下使用的代码作为回调:
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);
});