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

我有以下函数,我想将其重新用作“动作”模板,并将另一个函数作为参数传递,这将是动作函数,在其中执行。


问题


是否可以?我该怎么做?


请注意,“动作”是异步的,而且我正在使用 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);

  }


三国纷争
浏览 235回答 2
2回答

红糖糍粑

这是我的最终代码,使用 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);
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript