我試圖迭代從 http 呼叫回傳的套件陣列,然后在每次迭代時都必須呼叫 api 以獲得針對每個套件的積分。每個呼叫都回傳一個承諾,我必須構造一個陣列并填充每個 api 呼叫回應的結果。一旦suites.forEach回圈中的所有內容都完成,我想回傳結果陣列。但是當前代碼在第 1 個 suites.forEach 出現后重新運行控制。
import Q = require("q");
public static getTestResults(testcaseId: number): Promise<TestResult[]>{
let deferredPromise = Q.defer<TestResult[]>();
let results: TestResult[] = [];
let testManagementRestClient: TestManagementRestClient.TestHttpClient4_1;
testManagementRestClient = TestManagementRestClient.getClient();
testManagementRestClient.getSuitesByTestCaseId(testcaseId).then(suites => {
suites.forEach(suite => {
testManagementRestClient.getPoints(suite.project.id, suite.plan.id,
suite.id, undefined, undefined,
testcaseId.toString(), undefined,
true, undefined, undefined
).then(points => {
points.forEach(point => {
results.push(
{
projectId: suite.project.id,
runId: point.lastTestRun.id,
configuration: point.configuration.name
}
);
});
deferredPromise.resolve(results);
});
});
});
return deferredPromise.promise;
}
我用谷歌搜索并找到了 $q.all() 但不知道如何在這個特定場景中實作它,以及它是否能解決我的問題。
任何建議將受到歡迎!謝謝!
uj5u.com熱心網友回復:
我認為你在這里尋找的是Promise.all. 將對您的休息端點的呼叫組裝為一系列任務,大致如下:
const tasks = suites.map(suite => testManagementRestClient.getPoints(...
然后等待所有這些任務解決,使用Promise.all如下:
await Promise.all(tasks);
你可以在這里找到更多資訊Promise.all
uj5u.com熱心網友回復:
@Marcus 的解決方案作業正常。這是處理等待所有人的另一種方法。
public static getTestResults(testcaseId: number): Promise<TestPoints[]> {
let deferredPromise = Q.defer<TestPoints[]>();
let results: TestPoints[] = [];
let testManagementRestClient: TestManagementRestClient.TestHttpClient4_1;
testManagementRestClient = TestManagementRestClient.getClient();
testManagementRestClient.getSuitesByTestCaseId(testcaseId).then(async suites => {
for (const suite of suites) {
const points = await testManagementRestClient.getPoints(
suite.project.id,
suite.plan.id,
suite.id,
undefined,
undefined,
testcaseId.toString(),
undefined,
true,
undefined,
undefined
);
points.forEach(point => {
results.push(
{
projectId: suite.project.id,
runId: point.lastTestRun.id,
configuration: point.configuration.name " (" suite.name ")"
}
);
});
}
deferredPromise.resolve(results);
});
return deferredPromise.promise;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/324525.html
上一篇:回圈并回傳一個ID的數字
