以下是承诺我已经写过的代码
module.exports['getTemplate'] = (object)=>{
return new Promise((fullfill,reject)=>{
var content = cache.get(object['template']);
if(content == null){
reader("./templates/"+object['template'],'utf8',function(err,data){
if(err){
reject(err);
} else{
cache.put(object['template'],data);
fullfill(data,object['data']);
1) ~~~~> console.log(object['data']);
}
});
}else{
fullfill(content,object['data']);
}
});
}
module.exports['render'] = (template,context)=>{
return new Promise((fullfill,reject)=>{
2 ~~~~~~> console.log(context);
try{
var html = mustache.render(template,context);
fullfill(html,context);
}catch(err){
reject(err);
}
});
}
我在主应用中使用promise
来呼叫他们,例如
helper['parseJson'](item)
.then(helper['getTemplate'])
.then(helper['render'])
问题是该值在第一个console.log
中设置,但在第二个函数中变为undefined
,尽管模板的值很好。有人可以向我解释我哪里错了吗?
答案 0 :(得分:1)
只有一个值可以实现Promise。如果需要多个值,则需要解析对象或数组:
module.exports['getTemplate'] = (object)=>{
return new Promise((fullfill,reject)=>{
var content = cache.get(object['template']);
if(content == null){
reader("./templates/"+object['template'],'utf8',function(err,data){
if(err){
reject(err);
} else{
cache.put(object['template'],data);
fullfill({template: data, context: object['data']});
1) ~~~~> console.log(object['data']);
}
});
}else{
fullfill(content,object['data']);
}
});
}
module.exports['render'] = (data)=>{
return new Promise((fullfill,reject)=>{
2 ~~~~~~> console.log(data.context);
try{
var html = mustache.render(data.template,data.context);
fullfill({html: html, context: data.context});
}catch(err){
reject(err);
}
});
}
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/resolve