在继续之前等待 Bluebird 承诺解决

Wait for Bluebird promise to resolve before continuing

我正在使用一个名为 snoowrap 的 NPM 包,它访问 Reddit API。正如 Bluebird 所承诺的那样,它 returns 结果来自搜索结果。

我有这样的文件 reddit.js

const snoowrap = require('snoowrap');

function getFirstSearchResultUrl() {
  // Actual Reddit API credentials not included.
  const r = new snoowrap({
    userAgent,
    clientId,
    clientSecret,
    username,
    password,
  });

  return r
    .search({
      query: 'query',
      subreddit: 'askreddit',
    })
    .then((posts) => {
      return posts[0].url;
    });
}

const resultUrl = getFirstSearchResultUrl();
console.log(resultUrl);

但是 console.log 打印 [chainable Promise] 而不是返回的 URL。

如何让它打印返回的 URL 而不是 promise?我查看了文档并尝试了 .reflect().settle() 等不同的 Bluebird 方法,但它们似乎对我不起作用。

是否可以阻止脚本的其余部分在承诺完成之前执行?

你的getFirstSearchResultUrl()returns一个承诺。这就是您看到打印的日志语句的原因。而且 promise 还没有解决。

因此,您可以使用 async/await 等待它解决,或者您可以记录返回的结果,使用 getFirstSearchResultUrl().then() 添加回调。

类似于getFirstSearchResultUrl().then(url=> console.log(url))

您也可以await为您的getFirstSearchResultUrl()解决,获取结果并记录下来

类似于

(async function(){
  var url  =  await getFirstSearchResultUrl();
  console.log(url);
})();