SPFX - Call function after fetching data from multiple lists

%3CLINGO-SUB%20id%3D%22lingo-sub-2586931%22%20slang%3D%22en-US%22%3ESPFX%20-%20Call%20function%20after%20fetching%20data%20from%20multiple%20lists%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-2586931%22%20slang%3D%22en-US%22%3E%3CP%3EIn%20my%20SPFX%20web%20part%20I%20have%20two%20functions%3A%3C%2FP%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3CP%3ESendAnEmilUsingPnpJs%3C%2FP%3E%3CP%3Eand%3C%2FP%3E%3CP%3EGetAnotherData%3C%2FP%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3CP%3EAnd%2C%20I%20would%20like%20to%20call%20those%20functions%20after%20fetching%20data%20from%20multiple%20lists%2C%20but%20it%20doesn't%20work.%3C%2FP%3E%3CP%3EEntire%20code%20works%20fine%20until%20line%20%22this.SendAnEmilUsingPnpJs(bossEmail)%3B%22%20where%20I%20get%20an%20error%3A%3C%2FP%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3CP%3E%22Error%3A%20TypeError%3A%20Cannot%20read%20property%20'SendAnEmilUsingPnpJs'%20of%20undefined%22%3C%2FP%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3CP%3EHere%20is%20the%20code%3A%3C%2FP%3E%3CP%3EHow%20can%20I%20call%20those%20functions%20after%20everything%20else%20executes%3F%3C%2FP%3E%3CPRE%20class%3D%22lia-code-sample%20language-javascript%22%3E%3CCODE%3Epnp.sp.web.lists.getByTitle(%22First%20list%22)%0A%20%20%20%20.items.select(%22Name%22%2C%20%22MT%2FTitle%22%2C%20%22MT%2FID%22).expand(%22MT%22).filter(%60ProfilId%20eq%20%24%7BuserId%7D%60).get().then(function(result)%20%7B%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20let%20MTId%20%3D%20result%5B0%5D.MT.ID%3B%0A%20%20%20%20%20%20console.log(%22MTId%3A%20%22%20%2B%20MTId)%3B%0A%20%20%20%20%20%20pnp.sp.web.lists.getByTitle(%22Second%20list%22).items.filter(%60MTId%20eq%20%24%7BMTId%7D%60).get().then(function(result)%20%7B%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20console.log(%22user%3A%20%22%20%2B%20result%5B0%5D.myUserId)%3B%0A%0A%20%20%20%20%20%20%20%20pnp.sp.web.siteUsers.getById(userId).get().then(user%20%3D%26gt%3B%20%7B%0A%20%20%20%20%20%20%20%20%20%20console.log('Email%20ID%3A%20'%2C%20user.Email)%3B%20%0A%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20let%20size%20%3D%20%24('%23tbl_mytable%20tbody%20tr').length%3B%0A%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%24('%23tbl_mytable%20tbody%20tr').each(%20(tr_idx%2Ctr)%20%3D%26gt%3B%20%7B%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20let%20tdElem%20%3D%20%24(tr).children('td')%3B%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20pnp.sp.web.lists.getByTitle('Third%20list').items.getById(parseInt(tdElem%5B12%5D.innerText)).update(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20Status%3A%20statusValue%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D).then((iar%3A%20ItemAddResult)%20%3D%26gt%3B%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if(size%20%3D%3D%20tr_idx%2B1)%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20let%20bossEmail%20%3D%20%22mail%40server.com%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20this.SendAnEmilUsingPnpJs(bossEmail)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20this.GetAnotherData()%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D).catch((error%3Aany)%20%3D%26gt%3B%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20console.log(%22Error%3A%20%22%2C%20error)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D)%3B%0A%20%20%20%20%20%20%20%20%20%20%7D)%3B%0A%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%7D)%0A%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%7D).catch(function(err)%20%7B%0A%20%20%20%20%20%20%20%20%20%20alert(err)%3B%0A%20%20%20%20%20%20%7D)%3B%20%20%20%20%20%20%0A%20%20%20%20%7D).catch(function(err)%20%7B%0A%20%20%20%20%20%20%20%20alert(err)%3B%0A%20%20%20%20%7D)%3B%0A%20%0A%20%0A%20%0Apublic%20SendAnEmilUsingPnpJs(emailAsString)%3A%20void%20%0A%20%20%7B%20%20%20%20%0A%20%20%20%20%20%20sp.utility.sendEmail(%7B%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20Body%3A%20%22test%20test%22%2C%0A%20%20%20%20%20%20%20%20Subject%3A%20%22test%20email%22%2C%0A%20%20%20%20%20%20%20%20To%3A%20%5BemailAsString%5D%2C%0A%20%20%20%20%20%20%7D).then((i)%20%3D%26gt%3B%20%7B%0A%0A%20%20%20%20%20%20%7D).catch((i)%20%3D%26gt%3B%20%7B%20%20%0A%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%7D)%3B%20%20%20%20%20%20%20%0A%20%20%7D%0A%20%20%0A%20public%20GetAnotherData()%0A%20%7B%0A%20console.log('call')%3B%0A%20%7D%3C%2FCODE%3E%3C%2FPRE%3E%3C%2FLINGO-BODY%3E
New Contributor

In my SPFX web part I have two functions:

 

SendAnEmilUsingPnpJs

and

GetAnotherData

 

And, I would like to call those functions after fetching data from multiple lists, but it doesn't work.

Entire code works fine until line "this.SendAnEmilUsingPnpJs(bossEmail);" where I get an error:

 

"Error: TypeError: Cannot read property 'SendAnEmilUsingPnpJs' of undefined"

 

Here is the code:

How can I call those functions after everything else executes?

pnp.sp.web.lists.getByTitle("First list")
    .items.select("Name", "MT/Title", "MT/ID").expand("MT").filter(`ProfilId eq ${userId}`).get().then(function(result) {            
      let MTId = result[0].MT.ID;
      console.log("MTId: " + MTId);
      pnp.sp.web.lists.getByTitle("Second list").items.filter(`MTId eq ${MTId}`).get().then(function(result) {      
        console.log("user: " + result[0].myUserId);

        pnp.sp.web.siteUsers.getById(userId).get().then(user => {
          console.log('Email ID: ', user.Email); 
          
          let size = $('#tbl_mytable tbody tr').length;
          
          $('#tbl_mytable tbody tr').each( (tr_idx,tr) => {      
            let tdElem = $(tr).children('td');                
           
              pnp.sp.web.lists.getByTitle('Third list').items.getById(parseInt(tdElem[12].innerText)).update(
              {
                Status: statusValue
              }).then((iar: ItemAddResult) => {
                if(size == tr_idx+1)
                {                 
                  let bossEmail = "mail@server.com"
                  this.SendAnEmilUsingPnpJs(bossEmail);
                  this.GetAnotherData();
                }
              }).catch((error:any) => {
                  console.log("Error: ", error);
              });
          });
          
        })
        
        
      }).catch(function(err) {
          alert(err);
      });      
    }).catch(function(err) {
        alert(err);
    });
	
	
	
public SendAnEmilUsingPnpJs(emailAsString): void 
  {    
      sp.utility.sendEmail({        
        Body: "test test",
        Subject: "test email",
        To: [emailAsString],
      }).then((i) => {

      }).catch((i) => {  
        
      });       
  }
  
 public GetAnotherData()
 {
 console.log('call');
 }
0 Replies