簡體   English   中英

等待藍鳥承諾解決,然后再繼續

[英]Wait for Bluebird promise to resolve before continuing

我正在使用一個名為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,而不是諾言? 我通過文檔看去,嘗試了不同的藍鳥方法,如.reflect().settle()但他們似乎並沒有為我工作。

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

您的getFirstSearchResultUrl()返回一個Promise。 這就是為什么您看到該日志語句的原因。 承諾尚未解決。

因此,您可以等待它通過async/await解析,也可以記錄返回的結果,並使用getFirstSearchResultUrl().then()添加回調。

類似於getFirstSearchResultUrl().then(url=> console.log(url))

您也可以await getFirstSearchResultUrl()得到解決,獲取結果並記錄下來

就像是

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM