在继续之前等待 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);
})();
我正在使用一个名为 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);
})();