节点针同步等待承诺不起作用

时间:2021-03-22 07:50:31

标签: node.js rest express async-await

我不知道这么简单的事情怎么在 nodejs 和 javascript 中不起作用。我不知道如何解决这个问题。我想等待从外部获取电影列表并在返回数据之前对其进行解析。这是我第一次使用快递或针。但是我认为在返回之前尝试等待所有数据太复杂了。最好的等待是什么。

  App.get("/users", async (request, response) => {
  //console.log("movieDB");
  //database call works fine
  let userlist = await moviedb.getUsers();
  //console.log(userlist);


  let userMovieList = await getMovieUserObj(userlist);


  // Promise.resolve(userMovieList);
  console.log(userMovieList[0]);

  //console.log(userlist);
  response.send("see console" + userMovieList);
  response.end();
});

function getMovieUserObj(userlist) {
  return userlist.map(async (user) => {

    let movieInfoObj = getMovieData(user.favourite_movies);
    console.log(movieInfoObj);
    return {
      id: user.id,
      name: user.firstName + " " + user.lastName,
      favourite_movies: movieInfoObj,
    };
  }
  );
}


async function getMovieData(favourite_movies) {
  var favMovies = [];
  var movieArray = favourite_movies.split(",");
  var itemsProcessed = 0;

  return movieArray.map(async function (movieID) {

    param.i = movieID;

    return needle("get", omdbURL, param, { json: false })
      .then(function (res) {
        //return res.body;
        let movieDetail = res.body;
        let tempObj = {
          ID: movieDetail.imdbID,
          Title: movieDetail.Title,
          Year: movieDetail.Year,
          Plot: movieDetail.Plot,
          Poster: movieDetail.Poster,
        };
        console.log("short details of movie" + tempObj.ID);
        //console.log(tempObj);
        return tempObj;
      })
      .catch(function (err) {
        console.log("Error " + err);
        return [];
      });

    return movieOb;
  });
}

控制台输出。

sqlite 不支持插入默认值。设置 useNullAsDefault 标志以隐藏此警告。 (见文档

Listening to port :8080   Promise {   [
    Promise { <pending> },
    Promise { <pending> },
    Promise { <pending> },
    Promise { <pending> }   ] } Promise {   [
    Promise { <pending> },
    Promise { <pending> },
    Promise { <pending> }   ] } Promise {   [
    Promise { <pending> },
    Promise { <pending> },
    Promise { <pending> },
    Promise { <pending> },
    Promise { <pending> }   ] } Promise { [ Promise { <pending> }, Promise { <pending> } ] } Promise { [ Promise { <pending> } ] } Promise {   { id: 1, name: 'Anona Cruz', favourite_movies: Promise { [Array] } } } short details of moviett0848228 short details of moviett4154796 short details of moviett0120575 short details of moviett4154756 short details of moviett4154756 short details of moviett4116284 short details of moviett10515848 short details of moviett0103776 short details of moviett2313197 short details of moviett0389860 short details of moviett0287871 short details of moviett0417741 short details of moviett2975590 short details of moviett0926084 short details of moviett2395427

express 函数返回一个 promise 对象,我希望事情按顺序发生。

1 个答案:

答案 0 :(得分:-1)

我想我用

解决了它
return Promise.all(userlist.map(async (users. 

return Promise.all(movieArray.map(async function (movieID) {