链接承诺一个接一个,直到一个返回非空结果

Syl*_*wek 0 javascript promise

我有一个特定的承诺问题 - 我没有找到任何解决我的问题.

例如,我有服务列表(类)

const services = [
     FirstCacheDataProvider,
     SecondCacheDataProvider,
     // etc, there can be more services, unspecified number of services
];
Run Code Online (Sandbox Code Playgroud)

每个类都实现了返回promise的方法(例如find)(它在此方法中被解析,我无法访问此方法的主体.显然它是异步的)

现在我想逐个调用这个方法直到一个返回NOT EMPTY结果.

有没有办法在没有大链的情况下做到这一点?

工作流程示例:

我们有4项服务

FirstCacheDataProvider.find() // result of promise is empty
SecondCacheDataProvider.find() // result of promise is empty
ThirdCacheDataProvider.find() // result of promise IS NOT EMPTY
// fourth service's method is not called
Run Code Online (Sandbox Code Playgroud)

Cer*_*nce 6

一个简单的方法是在函数中使用for循环和await每个服务调用async:

for (let i = 0; i < services.length; i++) {
  const result = await services[i].find();
  if (result === 'NOT EMPTY') { // or whatever condition you're searching for.. .length?
    break;
  }
}
Run Code Online (Sandbox Code Playgroud)