我是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
答案 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);
};