然后用ifs拆分

时间:2018-06-05 20:06:03

标签: node.js

我有这个功能:

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!

2 个答案:

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

}