这是等待异步功能的AWS Lambda函数。我无法获得返回值。只要服务器上仍有一些要检索的值,我就需要循环获取数据:
let do_search = true;
while (do_search) {
const url = 'xxx';
await fetchData(url)
.then(response => {
console.log("fetchData result:", response);
if (response) {
console.log("Stop searching, no more data");
do_search = false;
}
})
.....
当还有更多数据需要处理时,我的fetchData返回false值。 fetchData函数:
async function fetchData(url) {
...
console.log("Returning false");
return false;
问题是什至我的fetchData返回false, 我的日志始终是:
Returning false
fetchData result: true
我还尝试将其他方法用于:
const createModelBInstance = async () => {
let response = await fetchData(url)
console.log("fetchData result:", response);
if (response){
do_search=false;
}
}
await createModelBInstance();
基于此论坛上的一些示例。 但是,完全相同的问题是,我的fetchData返回false,而“ fetchData result:true”。
任何可行的例子吗?返回的Promise值导致简单的代码变得非常复杂:(
答案 0 :(得分:1)
您不应该在JavaScript中编写硬循环。它是单线程的。
这是一个fetchData方法的示例,该方法休眠1秒钟,然后指示数据是否可用(以10%的可能性提供,而不以90%的可能性提供)。这纯粹是为了模拟您的异步URL提取程序。
const getRandom = (low, count) => {
return Math.floor((Math.random() * count) + low)
}
const fetchData = () => {
const promise = new Promise((resolve, reject) => {
setTimeout(() => {
const rand = getRandom(1, 10);
if (rand % 7) {
resolve({ rand });
} else {
resolve({ data: 'Here is the data', rand });
}
}, 1000);
});
return promise;
}
下面是一个示例,每隔2秒钟间隔一次调用此代码,直到数据可用为止。
const interval = setInterval(() => {
fetchData().then(rc => {
console.log(rc);
if (rc.data) {
// do something with rc.data
clearInterval(interval);
}
});
}, 2000);
输出示例:
{ rand: 2 }
{ rand: 10 }
{ rand: 1 }
{ data: 'Here is the data', rand: 7 }