title: Query multiple SharePoint lists Using REST API and angular JS
body: <p>I have a scenario of fetching data from multiple SharePoint 2013 lists using REST API and Angularjs. I am able to fetch the data successfully from one of the SharePoint list but my requirements is to fetch the data from multiple lists on the page load. I am using a provider hosted app to fetch the data from host web. I have 2 methods for calling 2 separate lists. <strong>I am getting the results from first method successfully but when the second method is called after the execution of 1st method. I am getting a time out error</strong>. It seems like i cannot call the 2 methods one after the other. Below is my code, could anyone please help me if i am missing something or if there is any other way to fetch the data from multiple SharePoint lists.</p>
  
  <p>Method 1: fetch Data from List 1</p>
  
  <pre><code>var query = listEndPoint + "/getbytitle('CandidateList')/items?$select=ID,FirstName,MiddleInitial,LastName,EmailAddress,PrimaryPhoneNo,ProfileImage,Address,State,Country,CurrentTitle,CurrentCompany,LastActivityModifiedBy,LastActivityModifiedDate,DeletedStatus&amp;@target='" + hostweburl + "'";
  
      var getCandidates = function (query, queryCandidateNotes) 
                      {
                      alert('getRequest');
                      var scriptbase = hostweburl + "/_layouts/15/";
                      var deferred = $q.defer();
                      // Load 15hives js files and continue to the successHandler    
                      $.getScript(scriptbase + "SP.Runtime.js",
                          function () {`enter code here`
                              $.getScript(scriptbase + "SP.js",
                                  function () {
                                      $.getScript(scriptbase +"SP.RequestExecutor.js",
                                           function () {
                                               var executor = new SP.RequestExecutor(appweburl);
                                               executor.executeAsync({
                                                   url: query,
                                                   method: "GET",
                                                   headers: { "Accept": "application/json; odata=verbose" },
                                                   success: successHandler,
                                                   error: errorHandler
                                               });
                                               //deferred.resolve();
                                           });
                                  });
                          });
  
                      function successHandler(data) {
                          var jsonObject1 = JSON.parse(data.body);
  
                          deferred.resolve(jsonObject1);
  
                      }
  
                      function errorHandler(data, errorCode, errorMessage) {
                          alert('Error1:' + errorMessage + data.body);
                      }
                      // Get 
                      return deferred.promise;
  
                      //Candidate Details Ends
                  };
  </code></pre>
  
  <p>Method 2: fetch Data from List 2</p>
  
  <pre><code>    var queryCandidateNotes = listEndPoint + "/getbytitle('CandidateNotes')/items?$select=Title,CandidateId&amp;@target='" + hostweburl + "'";
  
   // Get All Candidate Notes
              var getCandidateNotes = function (queryCandidateNotes) {
                  alert('getCandidateNotesRequest');
                  var scriptbase = hostweburl + "/_layouts/15/";
                  var deferred2 = $q.defer();
                  // Load 15hives js files and continue to the successHandler    
                  $.getScript(scriptbase + "SP.Runtime.js",
                      function () {
                          $.getScript(scriptbase + "SP.js",
                              function () {
                                  $.getScript(scriptbase + "SP.RequestExecutor.js",
                                       function () {
                                           var executor = new SP.RequestExecutor(appweburl);
                                           executor.executeAsync({
                                               url: queryCandidateNotes,
                                               method: "GET",
                                               headers: { "Accept": "application/json; odata=verbose" },
                                               success: successHandler,
                                               error: errorHandler
                                           });
                                           //deferred.resolve();
                                       });
                              });
                      });
  
                  function successHandler(data) {
                      var jsonObject2 = JSON.parse(data.body);
                      //var results2 = jsonObject2.d.results;
                      deferred2.resolve(jsonObject2);
                      //alert('2nd success:' + jsonObject2);
                      //return jsonObject2;
                  }
  
                  function errorHandler(data, errorCode, errorMessage) {
                      alert('Error2 :' + errorMessage + data.body);
                  }
                  // Get 
                  return deferred2.promise;
  </code></pre>
  
  <p>};</p>
  
  <p>Method 3: Calling method 2 after method 1</p>
  
  <pre><code>   var getRequest = function (query, queryCandidateNotes) {
  
  
                  var deferred = $q.defer();
                  $.when(getCandidates(query, queryCandidateNotes)).then(function (data) {
  
                      alert('Success1:' + data);
  
                                             $.when(getCandidateNotes(queryCandidateNotes)).then(function (data1) {
                          deferred.resolve(data);
                          alert('Success2:' + data1);
                      });
                      })
                  return deferred.promise;
              };
  
              return {
                  getRequest: getRequest
  
              };
  
          }]);
  })();
  </code></pre>