Обещания не разрешаются в порядке - PullRequest
0 голосов
/ 18 мая 2019

Из ProcessSearch Я возвращаю Promise.all с еще несколькими обещаниями в цепочке.Затем я пытаюсь связать больше с возвращенным обещанием, но оно разрешается до возвращенного обещания.

Журналы:

Search called
Searching: hello
Searching: hello
Search:https://api.cognitive.microsoft.com/bing/v7.0/search?mkt=en-us&offset=0&q=hello
DatabaseClient: getResults
DatabaseClient: getResults
Results:   ******THIS SHOUOLD BE AFTER BELOW***
Number of Results: 9
values: 2
newResults: 9 oldResults: 0 deduplicated: 9
DatabaseClient: saveKeywords: number of keywords:undefined
DatabaseClient: saveResults: number of results:9
DatabaseClient: saveResults resolve

router.post('/search', function(req, res, next){
console.log('Search called');
var body = req.body;
var searchString = body.searchString;
console.log('Searching: ' + searchString);
searchProcessor.ProcessSearch(searchString, databaseClient)
.then(
    databaseClient.getResults()
    .then( results =>
        console.log("Results: "  + results)
    )
).catch(error => console.log("ERROR: " + error));
})


exports.ProcessSearch = function processSearch(searchString, databaseClient)
{
  console.log("Searching: " + searchString);
  var searchPromise = searchClient.search(searchString)
    .then(results => {
      // Add keywords
      console.log("Number of Results: " + results.length)
      return results;
    });

  var getSavedResultsPromise = databaseClient.getResults();

  return Promise.all([searchPromise, getSavedResultsPromise])
  .then( values => {
    console.log("values: " + values.length)
    var searchResults = values[0];
    var savedResults = values[1];
    var newResults = deduplicate(searchResults, savedResults, (result) => {return result.url});
    var newKeywordsToOccurances = addKeywords(newResults);
    databaseClient.saveKeywords(newKeywordsToOccurances);
    return databaseClient.saveResults(newResults);
  })
}

1 Ответ

0 голосов
/ 18 мая 2019

Решил, где я вызвал функцию.Добавляя результаты => перед console.log (results), я предполагаю, что он ждет, пока возвращенное обещание не будет выполнено, вместо того, чтобы просто двигаться вперед.

router.post('/search', function(req, res, next){
console.log('Search called');
var body = req.body;
var searchString = body.searchString;
console.log('Searching: ' + searchString);
searchProcessor.ProcessSearch(searchString, databaseClient)
.then(
    databaseClient.getResults()
    .then( results =>
        console.log("Results: "  + results)
    )
).catch(error => console.log("ERROR: " + error));
})
...