我有这个功能:
function insert(foo, bar) {
return find(foo)
.then(i => create(i, bar.name, true))
.then(i => delete(i))
.then(i => i);
}
我想要的是添加一个if if this(我已经知道这不可能,但我需要找到最好的方法)
function insert(foo, bar) {
return find(foo)
if(bar.name === 'x'){
.then(i => create(i, bar.name, true))
.then(i => delete(i))
.then(i => i);
}else return foo;
}
一种方法就是
function insert(foo, bar) {
return find(foo)
.then(i => {
if(bar.name === 'x')return f(foo,bar)
else return i
}
}
function f(i, bar.name){
create(i, bar.name, true))
.then(i => delete(i))
.then(i => i);
}
还有其他最佳方式吗? TY!
答案 0 :(得分:0)
让你的回调找到一个正文:
function insert(foo, bar) {
return find(foo)
.then(i => {
if (bar.name !== "x") return foo;
return create(i, bar.name, true)
.then(created => delete(created));
});
}
或使用async/await
使其看起来更加同步:
async function insert(foo, bar) {
const found = await find(foo);
if (!found.name) return foo;
const created = await create(found, bar.name, true);
const deleted = await delete(i);
return deleted;
}
此外,我建议不要使用名为delete
的函数,因为它很容易与delete
关键字混淆。
答案 1 :(得分:0)
看起来你只需要将if子句移动到find(foo),只有当bar.name ==' x'
function insert(foo, bar) {
if(bar.name === 'x'){
return find(foo)
.then(i => create(i, bar.name, true))
.then(i => delete(i))
.then(i => i);
} else return foo
}
或者,如果你需要以任何一种方式调用find(foo),你只需要添加另一个.then包含一个带有if语句的函数
function insert(foo, bar) {
return find(foo)
.then((i) => {
if(bar.name === 'x'){
return create(i, bar.name, true)
.then(i => delete(i))
.then(i => i);
} else return foo
})
}