你按照这个例子修改一下你那个请求就行 我这边为了调试 就用 Promise替代了 function Promise1() { return new Promise((resolve) => { setTimeout(() => { resolve({ data: '123' }) },2000); }) } function Promise2() { return new Promise((resolve) => { setTimeout(() => { resolve({ data: '#234' }) }, 2000); }) } function Promise3() { return new Promise((resolve) => { setTimeout(() => { resolve({ data: '1' }) }, 2000); }) } function mainRequest(promises: any[]) { return new Promise((resolve) => { let i = 0; function nextRequest() { if (i === promises.length) { resolve('全部不符合条件') return; } const request = promises[i]() as Promise; i++; request .then((result) => { if (result.data.indexOf('#') > -1) { resolve(result.data); } else { nextRequest(); } }) .catch(() => { nextRequest(); }) } nextRequest(); }) } mainRequest([Promise3, Promise2, Promise1]).then((result) => { console.log('result', result); })