【发布时间】:2018-08-17 08:17:17
【问题描述】:
我有一个函数,它使用 web3.js 创建一个新帐户并返回帐户地址。这是我的服务
@Injectable()
export class ContractsService {
private web3: any;
public acc_no: any;
public createAccount(): any {
this.web3.personal.newAccount('abc123', function (error, result) {
console.log("in funct");
if (!error) {
this.acc_no = result;
} else {
this.acc_no = 0;
}
}
);
}
}
我想调用此函数createAccount,一旦该函数创建了一个新帐户,我希望我的组件继续执行。这是我的组件调用此 createAccount 函数的函数。
registerUser() {
if (this.signupData.username !== '' && this.signupData.password !== '' && this.signupData.firstname !== ''
&& this.signupData.lastname !== '') {
this.contractService.createAccount();
setTimeout(() => {
console.log(this.contractService);
}, 2000);
}
}
我尝试过使用超时但没有运气,我对此没有定义。有什么想法吗?
更新
我按照以下方式使用了promise
public createAccount(): Promise<any> {
this.web3.personal.newAccount('abc123', (error, result) => {
console.log("in funct");
if (!error) {
this.acc_no = result;
} else {
this.acc_no = 0;
}
}
).toPromise()
.then(() => {
return this.acc_no;
});
}
【问题讨论】:
-
使用
Observable或Promise -
如果你想正确填充 acc_no 你需要使用箭头函数
this.web3.personal.newAccount('abc123', (error, result) =>...`。然后,您可以将其包装在一个承诺中并在成功时调用 resolve -
@David 检查有问题的更新
-
@Faisal 请检查问题中的更新
-
@Shoaib Iqbal 检查我的答案