getFirstSearchResultUrl

getFirstSearchResultUrl

我正在使用一个名为snoowrap的NPM软件包,该软件包可以访问Reddit API。它会返回Bluebird承诺的结果,例如来自搜索的结果。

我有这样的文件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,而不是诺言?我浏览了文档,并尝试了不同的Bluebird方法,例如.reflect().settle(),但它们似乎对我没有用。

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

最佳答案

您的getFirstSearchResultUrl()返回一个承诺。这就是为什么您看到该日志语句的原因。承诺尚未解决。

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

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

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

就像是

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

09-25 18:50