boi*_*ing 3 javascript node.js promise async-await
我知道已经有这样的问题了。我保证我已经读过它们;我只是不明白。我有一些简单的代码来获取第 3 方 API 服务的令牌:
let tok = '';
const getToken = async () => {
tok = await btt.get();
console.log(tok);
};
getToken();
Run Code Online (Sandbox Code Playgroud)
tok总是undefined在console.log. 我认为重点await是你的代码会暂停,直到特定的承诺得到解决或拒绝;我错了吗?这是get函数:
async get () {
this.paymentGateway.clientToken.generate({
customerId: '5cdc7405da53494ee0f3bafe'
}, (err, result) => {
return new Promise((resolve, reject) => {
if (result.success) {
resolve(result.clientToken);
} else {
reject(result.errors);
}
});
});
}
Run Code Online (Sandbox Code Playgroud)
我已经被这个特定问题困扰了一段时间,并尝试了很多不同的方法。如果有人可以提供帮助,我将不胜感激。
谢谢。
您的异步函数没有返回承诺。尝试这个:
async get () {
return new Promise((resolve, reject) => {
this.paymentGateway.clientToken.generate({
customerId: '5cdc7405da53494ee0f3bafe'
}, (err, result) => {
if (result.success) {
resolve(result.clientToken);
} else {
reject(result.errors);
}
}
});
}
Run Code Online (Sandbox Code Playgroud)
一个例子:
async get () {
return new Promise((resolve, reject) => {
this.paymentGateway.clientToken.generate({
customerId: '5cdc7405da53494ee0f3bafe'
}, (err, result) => {
if (result.success) {
resolve(result.clientToken);
} else {
reject(result.errors);
}
}
});
}
Run Code Online (Sandbox Code Playgroud)
const mockPaymentGateway = {
clientToken: {
// a mock that will randomly succeed and fail.
generate: (_, callback) => callback(null, Math.random() > 0.5 ? {
success: true,
clientToken: '<This is a token value.>'
} : {
errors: ['We have no moneys.']
}),
}
}
// I assume you have other things in your service, but here is an example
class SomeService {
constructor(paymentGateway) {
this.paymentGateway = paymentGateway;
}
async get() {
return new Promise((resolve, reject) => {
this.paymentGateway.clientToken.generate({
customerId: '5cdc7405da53494ee0f3bafe'
}, (err, result) => {
if (result.success) {
resolve(result.clientToken);
} else {
reject(result.errors);
}
});
});
}
}
// Generating mock data...
const btt = new SomeService(mockPaymentGateway);
let tok = '';
const getToken = async() => {
try {
tok = await btt.get();
console.log(tok);
} catch (e) {
console.log('Errors getting token:', e);
}
};
document.querySelector('#get-token').addEventListener('click', async() => {
console.log('Getting token');
getToken()
});Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1845 次 |
| 最近记录: |