首页 > 解决方案 > 在渲染页面之前等待待处理的 Promise

问题描述

我目前正在为 node.js 中的 Twitch 社区开发一个 web 项目。在呈现页面之前,我正在使用 Twitch API 接收个人资料图片并将它们与其他信息一起添加到对象数组中。不幸的是,当页面被渲染时,我只会得到一个关于个人资料图片 URL 的未决承诺。在页面呈现近一毫秒后,我得到了关于 PB-Links 的控制台日志,所以它运行得很快,所以在我看来,ajax 没有意义。在脚本继续渲染页面之前是否有可能等到加载承诺?

先感谢您

async function getStreamersPB(streamerName){
  var streamer = await twitch.getUsers(streamerName);
  var streamerPBURL = await streamer.data[0].profile_image_url;


  console.log(streamerPBURL);
}

...

router.get('/', (req, res) => {

  var streamer = [];
    con.query("SELECT * FROM xxx",  function (err, result) {
    if (err) {
      console.log(err);
    }
    if (result.length !== 0){
      for (let i = 0; i < result.length; i++) {
        let streamObj = {
          "id": result[i].id,
          "name": result[i].name,
          "website": result[i].website.toLowerCase(),
          "status": result[i].status,
          "rang": result[i].rang,
          "userPB": getStreamersPB(result[i].name)
        }
        console.log(streamObj);
        streamer.push(streamObj);
    }}});

    con.query("SELECT * FROM xxx WHERE xxx = '" + xxx + "'", function (err, result) {
    if (err) {
      console.log(err);
    } if(result.length === 1){
    res.render('home', {
      message: result[0].twitchName,
      userID: result[0].id,
      streamer: streamer
    });

...

那是我的控制台日志:

{
  id: 1,
  name: 'xxx',
  website: 'xxx',
  status: 0,
  rang: 1,
  userPB: Promise { <pending> }
}
https://static-cdn.jtvnw.net/...xxx

标签: javascriptnode.jsexpressejstwitch

解决方案


我修好了!我忘了在我的函数中添加一个 return 语句!

非常感谢大家的回答和帮助!!!


推荐阅读