我正在使用名为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,而不是承诺?我查看了文档并尝试了不同的Bluebird方法,例如.reflect()
和.settle()
,但它们似乎并不适合我。
在承诺完成之前,是否可以阻止脚本的其余部分执行?
答案 0 :(得分:1)
您的getFirstSearchResultUrl()
会返回一个承诺。这就是为什么你看到打印日志声明的原因。并且承诺尚未解决。
因此,您可以等待async/await
解析它,或者您可以记录返回的结果,并使用.then()
向getFirstSearchResultUrl()
添加回调。
像getFirstSearchResultUrl().then(url=> console.log(url))
您也可以await
解析getFirstSearchResultUrl()
,获取结果并记录
像
这样的东西(async function(){
var url = await getFirstSearchResultUrl();
console.log(url);
})();