打字稿:将For循环转换为Promise并等待解决所有问题
Typescript: Convert For loop to Promise and wait to resolve all
问题: save.emit() 在下面的“for”循环中完成所有迭代之前运行,该循环显示了不正确的 addUpdate 值在循环内调用。
我正在尝试将 for 循环转换为 promise,然后等待每个 promise 解决,以便我可以发出更改并关闭弹出窗口。
下面是一个测试代码,我想在每次迭代中首先打印“console.log("Print Before")
”,然后在所有迭代完成后最后打印“console.log("Print After")
”。
非常感谢任何有关此语法的帮助。
convertForLoopToPromiseAndWait(someParameterOfTypeObject) {
for (var test of someParameterOfTypeObject) {
var testVariable = test.setValue;
if (testVariable) {
dataService.addUpdateEndpointCall();
console.log("Print Before");
}
}
console.log("Print After");
save.emit();
}
async addUpdateEndpointCall() {
const promise1 = this.dataService.addCall().take(1).toPromise();
const promise2 = this.dataService.deleteCall().take(1).toPromise();
await Promise.all([promise1, promise2])
.then(_ => this.save.emit());
}
将convertForLoopToPromiseAndWait
转换为异步方法,然后您可以在关键字之后和dataService.addUpdateEndpointCall();
之前使用await
async convertForLoopToPromiseAndWait(someParameterOfTypeObject) {
for await (var test of someParameterOfTypeObject) {
var testVariable = test.setValue;
if (testVariable) {
await dataService.addUpdateEndpointCall();
console.log("Print Before");
}
}
console.log("Print After");
await save.emit();
}
我认为你在这里犯了一个错误:
const promise1 = await this.dataService.addCall().take(1).toPromise();
const promise2 = await this.dataService.deleteCall().take(1).toPromise();
你在等待承诺。放入变量 promise1
和 promise2
的结果将不是承诺。
你不是说下面的吗?
async addUpdateEndpointCall() {
const promise1 = this.dataService.addCall().take(1).toPromise();
const promise2 = this.dataService.deleteCall().take(1).toPromise();
await Promise.all([promise1, promise2])
.then(_ => this.save.emit());
}
另一种方法是列出承诺并等待它们解决:
const promises = [];
for await (your iterating condition) {
promises.push(dataService.addUpdateEndpointCall());
}
然后使用
await Promise.all(promises).then( this.save.emit());
问题: save.emit() 在下面的“for”循环中完成所有迭代之前运行,该循环显示了不正确的 addUpdate 值在循环内调用。
我正在尝试将 for 循环转换为 promise,然后等待每个 promise 解决,以便我可以发出更改并关闭弹出窗口。
下面是一个测试代码,我想在每次迭代中首先打印“console.log("Print Before")
”,然后在所有迭代完成后最后打印“console.log("Print After")
”。
非常感谢任何有关此语法的帮助。
convertForLoopToPromiseAndWait(someParameterOfTypeObject) {
for (var test of someParameterOfTypeObject) {
var testVariable = test.setValue;
if (testVariable) {
dataService.addUpdateEndpointCall();
console.log("Print Before");
}
}
console.log("Print After");
save.emit();
}
async addUpdateEndpointCall() {
const promise1 = this.dataService.addCall().take(1).toPromise();
const promise2 = this.dataService.deleteCall().take(1).toPromise();
await Promise.all([promise1, promise2])
.then(_ => this.save.emit());
}
将convertForLoopToPromiseAndWait
转换为异步方法,然后您可以在关键字之后和dataService.addUpdateEndpointCall();
await
async convertForLoopToPromiseAndWait(someParameterOfTypeObject) {
for await (var test of someParameterOfTypeObject) {
var testVariable = test.setValue;
if (testVariable) {
await dataService.addUpdateEndpointCall();
console.log("Print Before");
}
}
console.log("Print After");
await save.emit();
}
我认为你在这里犯了一个错误:
const promise1 = await this.dataService.addCall().take(1).toPromise();
const promise2 = await this.dataService.deleteCall().take(1).toPromise();
你在等待承诺。放入变量 promise1
和 promise2
的结果将不是承诺。
你不是说下面的吗?
async addUpdateEndpointCall() {
const promise1 = this.dataService.addCall().take(1).toPromise();
const promise2 = this.dataService.deleteCall().take(1).toPromise();
await Promise.all([promise1, promise2])
.then(_ => this.save.emit());
}
另一种方法是列出承诺并等待它们解决:
const promises = [];
for await (your iterating condition) {
promises.push(dataService.addUpdateEndpointCall());
}
然后使用
await Promise.all(promises).then( this.save.emit());