一旦函数在 Angular 4 中返回,就继续执行
proeceed the execution once a function has returned in Angular 4
我有一个函数,它使用 web3.js 创建一个新帐户和 return 帐户地址。这是我的服务
@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;
});
}
但是我收到了这个错误
试试看
public createAccount(): Promise <number>
{
return new Promise((resolve, reject) => {
this.web3.personal.newAccount('abc123', (error, result) => {
console.log("in funct");
if (!error) {
this.acc_no = result;
resolve(result);
} else {
this.acc_no = 0;
resolve(result);
//OR reject();
}
}
);
}
}
registerUser()
{
//...
this.contractService.createAccount().then(acc_no =>
{
console.log(acc_no);
});
}
要使用 toPromise()
,您需要包括:
import 'rxjs/add/operator/toPromise';
引用:
我有一个函数,它使用 web3.js 创建一个新帐户和 return 帐户地址。这是我的服务
@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;
});
}
但是我收到了这个错误
试试看
public createAccount(): Promise <number>
{
return new Promise((resolve, reject) => {
this.web3.personal.newAccount('abc123', (error, result) => {
console.log("in funct");
if (!error) {
this.acc_no = result;
resolve(result);
} else {
this.acc_no = 0;
resolve(result);
//OR reject();
}
}
);
}
}
registerUser()
{
//...
this.contractService.createAccount().then(acc_no =>
{
console.log(acc_no);
});
}
要使用 toPromise()
,您需要包括:
import 'rxjs/add/operator/toPromise';
引用: