为了账号安全,请及时绑定邮箱和手机立即绑定

如何将 2 个 Javascript 函数合二为一?

如何将 2 个 Javascript 函数合二为一?

三国纷争 2021-06-29 13:53:42
我有以下函数,我想将其重新用作“动作”模板,并将另一个函数作为参数传递,这将是动作函数,在其中执行。问题是否可以?我该怎么做?请注意,“动作”是异步的,而且我正在使用 React。  function templateAction(action) {    try {      setLoading(true);      setError(null);      // DO SOMETHING      action();      setLoading(false);    }    catch(err) {      console.log(err);      setError(err);      setLoading(false);    }  }在该action()调用中应该执行以下函数:  async function getBlogPost() {    const querySnapshot = await firebase.firestore().collection('blog').where('slug','==',props.match.params.slug).get();      console.log(querySnapshot.docs);      if (querySnapshot.docs.length === 0) {        throw 'ERROR: BlogPost not found...';      } else if (querySnapshot.docs.length > 1) {        throw 'ERROR: More than 1 blogPost found...';      }      const blogPostData = querySnapshot.docs[0].data();      setFirestoreID(querySnapshot.docs[0].id);      setBlogPost(blogPostData);  }
查看完整描述

2 回答

?
红糖糍粑

TA贡献1815条经验 获得超6个赞

这是我的最终代码,使用 try catch 块捕获错误。


它有效,但我认为它损害了可读性。


async function templateAction(action) {

  try {

    console.log('Template Action BEFORE calling action');

    await action();

    console.log('Template Action AFTER calling action');

  }

  catch(err) {

    console.log('I was caught and logged');

    console.log(err);

  }

}


function action() {

  return new Promise(async (resolve,reject) => {

    try {

      console.log('I am sync from action function BEFORE async call');

      await mockAPI();

      console.log('I am sync from action function AFTER async call');

      resolve();

    }

    catch(err) {

      console.log('I was caught');

      reject(err);

    }

  });

}


function mockAPI() {

  return new Promise((resolve,reject) => {

    setTimeout(() => {

      console.log('I am from async mockAPI call');

      resolve();

    },1500);

  });

}


templateAction(action);


查看完整回答
反对 回复 2021-07-08
  • 2 回答
  • 0 关注
  • 234 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信