抽象Promises,如何将参数传递给函数

时间:2017-10-30 08:09:12

标签: javascript node.js promise

我是JS的新手并且使用Promises练习。

我有以下结构,它有效:

Database.load('menus')
 .then((value) => {return JSON.parse(value)})
 .then((parsed) => {return parsed['Menu'].map(Menu.create)})
 .then(console.log)
 .catch((err) => console.log(err))

我想让它成为一个可重复使用的函数并抽象出文字,我已经尝试过:

parse = (value) => {return JSON.parse(value)}
createObject = (parsed) => {return parsed[key].map(`${key}`.create)}

convert = (name, key) => {
  Database.load(name)
  .then(parse)
  .then(createObject)
  .then(console.log)
}
convert('menus', 'Menu')

但这又回来了:

(node:51848) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): ReferenceError: key is not defined

2 个答案:

答案 0 :(得分:2)

key在所需的上下文中不可见。

parse = (value) => {
  return JSON.parse(value)
}
createObject = (key) => { (parsed) => {
  return parsed[key].map(`${key}`.create)
}};

convert = (name, key) => {
  Database.load(name)
    .then(parse)
    .then(createObject(key))
    .then(console.log)
}
convert('menus', 'Menu')

答案 1 :(得分:2)

@ bluehipy回答了要走的路,虽然我写了creatObject喜欢

const createObject = key => parsed => parsed[key].map(`${key}`.create);

另一种选择,它可能更容易理解,并且不需要函数返回函数 - 不是说它有什么问题,我会像上面那样做,但它可以做到你是JS的新手

const parse = value => JSON.parse(value);

const convert = (name, key) => {
    const createObject = parsed => parsed[key].map(`${key}`.create);

    return Database.load(name)
    .then(parse)
    .then(createObject)
    .then(console.log);
};