异步/等待返回Promise <pending>

时间:2018-09-30 11:42:46

标签: javascript

首先,我很抱歉提出有关异步/等待的问题,因为我知道有很多答案,但是在阅读了很多答案之后,我还没有找到可行的解决方案。

有一个搜索函数flickr.js,它在Flickr API中搜索查询,但是该函数返回Promise,但是我需要一个对象     {query,images:[{photo1},{photo2},{photo3}]}

flickr.js函数

function() {
let ImageFinder = (window.CLASSES.ImageFinder = function() {});

 ImageFinder.prototype.search = (query, moduleId) => {
  switch (moduleId) {
   case 'static':
     return window.MODULES.Static(query);
   case 'flickr':
     return window.MODULES.Flickr(query); // Need to return object { query, images : [{photo1}, {photo2}, {photo3}] }

   default:
    throw Error('Search module not found.');
  }
 };
});

它被称为

ImageFinder.js

# Print .dtypes
print(recent_grads.dtypes)

# Output summary statistics
print(recent_grads.describe())

# Exclude data of type object
print(recent_grads.describe(exclude=["object"]))

2 个答案:

答案 0 :(得分:1)

您的window.MODULES.Flickr(query);返回一个诺言,而您要处理该诺言{ query, images }的结果的唯一方法是解决诺言。没有其他解决办法。

因此,如果您想在ImageFinder.prototype.search中使用承诺结果,则可以将其标记为async并在搜索功能中使用await window.MODULES.Flickr(query);来解析值。

此外,所有使用ImageFinder.prototype.search的功能也必须先解决承诺,例如使用awaitthen()

var obj = await imageFinder.search(query, moduleId);

答案 1 :(得分:0)

异步功能是ES7包装器的诺言。这只是表达同一件事的一种方式。为了从函数接收返回的值,由于它是异步的,因此需要等待它。这可以通过使用也是异步的父函数来实现。假设我有两个函数,ab。它们都是异步的。

async function a () {
    console.log(await b() );
}

在调用时,a将打印返回的值b。当发生错误或函数返回时,promise分别为“ resolved”或“ rejected”。

promise返回其值的形式与常规函数相同,不同之处在于,为了捕获此结果,需要等待它,或者使用诸如thencatch之类的特定promise函数。

希望这会有所帮助