在承诺的第二个功能中没有价值

时间:2017-01-20 19:03:47

标签: node.js 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(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,尽管模板的值很好。有人可以向我解释我哪里错了吗?

1 个答案:

答案 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