gpt4 book ai didi

angular - async await + toPromise 挂起

转载 作者:太空狗 更新时间:2023-10-29 17:46:02 34 4
gpt4 key购买 nike

我正在使用 ngx-stripe ,并且 createToken 返回一个 Observable,我试图将其转换为一个 promise,以便我可以使用 Async/await。但是,看起来 promise 并没有解决。调试不会显示任何内容,我的 try/Catch block 也不会捕获任何错误。

我想知道我是否正确使用了 toPromise :

import {
Elements,
Element as StripeElement,
ElementsOptions,
BankAccountData,
StripeService
} from 'ngx-stripe';

constructor(
public stripeService: StripeService,

) {}



async next() {
let token: any;
let account: BankAccountData = {
country: this.country,
currency: this.currency,
account_holder_name: this.first_name + " " + this.last_name,
account_holder_type: this.type,
account_number: account_number,
routing_number: routing_number
};

console.log("--> Creating Bankaccount Token", account);

try {
token = await this.stripeService.createToken("bank_account", account).toPromise();
} catch (excep) {
console.log(excep);
}

console.log("-->Token Generated : ", token);
}

编辑

调试器——如果有帮助的话。这是最后的控制台输出:

Creating Bankaccount Token {country: "AU", currency: "aud", account_holder_name: "Someone Name", account_holder_type: "individual", account_number: "000123456", …}

enter image description here

***************************编辑 ********************* **我不确定为什么,但是当我创建一个 stackblitz 时代码起作用了。

然后我比较了 stackblitz 中的库并更新了我的 Angular 、rxjs、rxjs-compat 以匹配 stackblitz 中的内容并再次尝试,我得到了与以前相同的结果。

然后我删除了 toPromise() 并将其更改为:

this.stripeService.createToken("bank_account", account).subscribe(data => {
console.log(data);
});

与 stackblitz 中的内容相比,我不确定是什么限制了我的项目。我不确定如何解决问题所在,我唯一能想到的就是从头开始重建项目。

最佳答案

尝试做 .pipe(take(1)).toPromise()

请看rxjs内部代码逻辑。 resolve 仅在完成时调用(参见下面的代码)。因此,根据您的可观察对象的工作方式,您可能无法获得分辨率。然而,即使 observable 未完成,subscribe 也会在每次值发射时被调用,这就是您的 subscribe 起作用的原因。 take(1) 将导致完成,因此这应该调用您的 promise 。

这是该函数的 rxjs 代码。

Observable.prototype.toPromise = function (PromiseCtor) {
var _this = this;
if (!PromiseCtor) {
if (_root.Rx && _root.Rx.config && _root.Rx.config.Promise) {
PromiseCtor = _root.Rx.config.Promise;
}
else if (_root.Promise) {
PromiseCtor = _root.Promise;
}
}
if (!PromiseCtor) {
throw new Error('no Promise impl found');
}
return new PromiseCtor(function (resolve, reject) {
var value;
_this.subscribe(function (x) { return value = x; }, function (err) { return reject(err); }, function () { return resolve(value); });
});
};

关于angular - async await + toPromise 挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52593442/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com