如何返回将使用异步操作中的变量填充的字符串?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何返回将使用异步操作中的变量填充的字符串?相关的知识,希望对你有一定的参考价值。

我想要生成类似于这个http://localhost:9090/api/${randomId}的url模板字符串,并在index.ejs文件中使用以下html标记<a href="urlTemplateString">Click Here To See User Profile</a>实现它。

我使用Mongo数据库使用以下randomId检索此Users.find({}).distinct("_id")。一旦我获得了所有用户id,我想从数组中获得一个随机id。为此,我使用了lodash _.sample()

我使用javascript Promises尝试将我想要的随机ID放在一个字符串中。然而,当我来到res.render()的结果时,我似乎得到的只是http://localhost:9090/api/[object Promise]

到目前为止,我的代码如下:

function getRandomUserId(req, res, next) {
 return new Promise((resolve, reject) =>
   resolve(Users.find({}).distinct("_id"))
)
.then(allUserIds => {
  return new Promise((resolve, reject) => resolve(_.sample(allUserIds)));
})
.then(randomId => {
  res.render("index.ejs", {
    link: `http://localhost:9090/api/${randomId}`
  });
 });
}

我能够检索随机ID和控制台记录此随机ID,但我无法将此随机ID返回到最终的url模板字符串。

如何执行此异步操作以将randomId返回到url模板字符串?

答案
function getRandomUserId(req, res, next)
{
    return Users.find({}).distinct("_id").exec() // assuming mongoose
    .then((allUserIds) => 
    {
        res.render
        (
            "index.ejs", 
            {
                link: `http://localhost:9090/api/${_.sample(allUserIds)}`
            }
        );
    });
}

以上是关于如何返回将使用异步操作中的变量填充的字符串?的主要内容,如果未能解决你的问题,请参考以下文章

如何将变量从 AsyncTask 返回到 Android 中的 Google Map 活动

在哪里以及如何使用片段填充我的标签

如何将Ext.Ajax.request请求 返回的值赋值给全局变量

Node.JS:如何将变量传递给异步回调? [复制]

如何使用 sqlplus 脚本中的 select max(colx) from tabley 返回的值填充替换变量?

使用来自异步 NSURLConnection 的数据填充 NSImage