Angular 如何使用async和Wait?它';它不工作了
好的,我有三个函数我希望第一个函数被执行以获得它的ID,然后第二个和第三个函数可以被执行,下面是一个例子:Angular 如何使用async和Wait?它';它不工作了,angular,typescript,asynchronous,async-await,Angular,Typescript,Asynchronous,Async Await,好的,我有三个函数我希望第一个函数被执行以获得它的ID,然后第二个和第三个函数可以被执行,下面是一个例子: async persistAll() { await (this.AddElement()); this.AddElement2( this.Id); this.AddElement3( this.Id); } 正如我所说,我希望第一个函数先完成,然后其他函数才能完成它们的工作,SetTimeOut工作正常,但我不想使用它,因为它取决于我将发送多少数据。 以下
async persistAll()
{
await (this.AddElement());
this.AddElement2( this.Id);
this.AddElement3( this.Id);
}
正如我所说,我希望第一个函数先完成,然后其他函数才能完成它们的工作,SetTimeOut工作正常,但我不想使用它,因为它取决于我将发送多少数据。
以下是加法函数的示例:
async AddElement (){
let a = 1,
let b = 2
id= a+b
return new Promise(resolve => {id})
}
这只是我想做的一个例子,不管怎样,它一点也不等待,我也试过了
Promise.resolve(id)
我做错了什么?谢谢。我想这就是你想要的:
async persistAll(){
this.id = await this.addElement();
this.AddElement2( this.Id);
this.AddElement3( this.Id);
}
async AddElement (){
let a = 1,
let b = 2
id= a+b
return new Promise(resolve => {id})
}
如果有一个沙箱或更多的代码来更好地理解您要做的事情,那将是非常有帮助的我认为这就是您想要的:
async persistAll(){
this.id = await this.addElement();
this.AddElement2( this.Id);
this.AddElement3( this.Id);
}
async AddElement (){
let a = 1,
let b = 2
id= a+b
return new Promise(resolve => {id})
}
如果有一个沙盒或更多的代码来更好地理解您要做的事情,那将非常有帮助。您的AddElement函数不是返回一个
承诺,而是返回一个承诺。这是因为async
/await
是语法助手;对于异步函数,任何返回的值都会自动包装在承诺中
在您的情况下,可以让typescript通过显式注释返回类型来帮助您找到问题。改为编写此命令,它会给您一个编译器错误:
async AddElement (): Promise<number>{
let a = 1,
let b = 2
id= a+b
return new Promise(resolve => {id})
}
这是一个例子。它产生以下输出:
[LOG]: "AddElement", 3
[LOG]: "AddElement2", 3
[LOG]: "AddElement3", 3
[LOG]: "Done"
以下是该游乐场的完整代码供参考:
const example = {
Id: 0,
async persistAll()
{
this.Id = await (this.AddElement());
this.AddElement2(this.Id);
this.AddElement3(this.Id);
},
async AddElement(): Promise<number>{
let a = 1;
let b = 2;
const id = a+b;
console.log("AddElement", id);
return id;
},
AddElement2(id: number) {
console.log("AddElement2", id);
},
AddElement3(id: number) {
console.log("AddElement3", id);
}
}
example.persistAll().then(() => console.log("Done"));
const示例={
Id:0,
异步persistAll()
{
this.Id=wait(this.AddElement());
本附录2(本Id);
本附录3(本Id);
},
异步AddElement():承诺{
设a=1;
设b=2;
常数id=a+b;
console.log(“AddElement”,id);
返回id;
},
附录2(id:编号){
console.log(“AddElement2”,id);
},
附录3(id:编号){
console.log(“AddElement3”,id);
}
}
然后(()=>console.log(“完成”);
您的AddElement函数不是返回一个承诺,而是返回一个承诺。这是因为async
/await
是语法助手;对于异步函数,任何返回的值都会自动包装在承诺中
在您的情况下,可以让typescript通过显式注释返回类型来帮助您找到问题。改为编写此命令,它会给您一个编译器错误:
async AddElement (): Promise<number>{
let a = 1,
let b = 2
id= a+b
return new Promise(resolve => {id})
}
这是一个例子。它产生以下输出:
[LOG]: "AddElement", 3
[LOG]: "AddElement2", 3
[LOG]: "AddElement3", 3
[LOG]: "Done"
以下是该游乐场的完整代码供参考:
const example = {
Id: 0,
async persistAll()
{
this.Id = await (this.AddElement());
this.AddElement2(this.Id);
this.AddElement3(this.Id);
},
async AddElement(): Promise<number>{
let a = 1;
let b = 2;
const id = a+b;
console.log("AddElement", id);
return id;
},
AddElement2(id: number) {
console.log("AddElement2", id);
},
AddElement3(id: number) {
console.log("AddElement3", id);
}
}
example.persistAll().then(() => console.log("Done"));
const示例={
Id:0,
异步persistAll()
{
this.Id=wait(this.AddElement());
本附录2(本Id);
本附录3(本Id);
},
异步AddElement():承诺{
设a=1;
设b=2;
常数id=a+b;
console.log(“AddElement”,id);
返回id;
},
附录2(id:编号){
console.log(“AddElement2”,id);
},
附录3(id:编号){
console.log(“AddElement3”,id);
}
}
然后(()=>console.log(“完成”);
谢谢您的回复,但它仍然不起作用我甚至在AddElement()之后添加了一个控制台日志,但它直接从控制台日志开始…我希望函数至少100%执行,然后传递到第二个函数我将建议的代码复制到了一个typescript游戏场,并将其编辑为我的原始答案。您的代码中必须有一个在原始问题中缺失的细节。你能发布一个最小的方法来重现你的问题吗?谢谢你的回复,但它仍然不起作用,我甚至在AddElement()之后添加了一个控制台日志但它直接从控制台日志开始…我希望至少100%执行该函数,然后传递到第二个函数。我将建议的代码复制到一个typescript中,并将其编辑为我的原始答案。您的代码中必须有一个在原始问题中缺失的细节。你可以发布一个最小的方法来重现你的问题吗?谢谢你的回复,但我做了同样的事情,但它仍然不起作用…我希望函数至少100%执行,然后传递到第二个函数,你根本不需要在AddElement中使用async,谢谢你的回复,但我做了同样的事情,但它仍然不起作用…我希望函数至少100%执行,然后传递给第二个函数,你根本不需要在AddElement中使用async,因为它的工作方式与你所期望的相同。