首先,我很抱歉提出有关异步/等待的问题,因为我知道有很多答案,但是在阅读了很多答案之后,我还没有找到可行的解决方案。
有一个搜索函数flickr.js,它在Flickr API中搜索查询,但是该函数返回Promise,但是我需要一个对象 {query,images:[{photo1},{photo2},{photo3}]}
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.');
}
};
});
它被称为
# Print .dtypes
print(recent_grads.dtypes)
# Output summary statistics
print(recent_grads.describe())
# Exclude data of type object
print(recent_grads.describe(exclude=["object"]))
答案 0 :(得分:1)
您的window.MODULES.Flickr(query);
返回一个诺言,而您要处理该诺言{ query, images }
的结果的唯一方法是解决诺言。没有其他解决办法。
因此,如果您想在ImageFinder.prototype.search
中使用承诺结果,则可以将其标记为async
并在搜索功能中使用await window.MODULES.Flickr(query);
来解析值。
此外,所有使用ImageFinder.prototype.search
的功能也必须先解决承诺,例如使用await
或then()
var obj = await imageFinder.search(query, moduleId);
答案 1 :(得分:0)
异步功能是ES7包装器的诺言。这只是表达同一件事的一种方式。为了从函数接收返回的值,由于它是异步的,因此需要等待它。这可以通过使用也是异步的父函数来实现。假设我有两个函数,a
和b
。它们都是异步的。
async function a () {
console.log(await b() );
}
在调用时,a
将打印返回的值b
。当发生错误或函数返回时,promise分别为“ resolved”或“ rejected”。
promise返回其值的形式与常规函数相同,不同之处在于,为了捕获此结果,需要等待它,或者使用诸如then
或catch
之类的特定promise函数。
希望这会有所帮助