如何在邮递员考试中使用承诺? [英] How to use Promises in Postman tests?
本文介绍了如何在邮递员考试中使用承诺?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我需要在我的邮递员测试中使用一些异步代码。
因为这是一个复杂的场景,所以我用以下代码在一个非常简单的测试中重现了该场景:
let promiseNumber = 0;
function resolvedPromise() {
return new Promise((resolve, reject) => {
pm.sendRequest('https://postman-echo.com/get', (err, res) => {
if (err) {
console.log(err);
reject();
} else {
console.log(`Resolved promise ${++promiseNumber}`);
resolve();
}
});
});
}
resolvedPromise()
.then(resolvedPromise)
.then(resolvedPromise)
.catch(err => console.log(err));
控制台上的预期结果为:
Resolved promise 1
Resolved promise 2
Resolved promise 3
但我收到的是:
Resolved promise 1
有没有办法在邮递员网站上提供承诺或异步代码?
推荐答案
更新:最初的解决方案使用2147483647作为超时值,现在按照评论中的建议进行了重构,使用了Number.MAX_SAFE_INTEGER。
我又做了一些测试,发现在我使用pm.sendRequest后,它总是停止工作。如果我尝试解决承诺,它会奏效。
似乎是查看this thread的已知错误。
它的解决方法是在处理代码时只保留打开的超时。只需确保所有可能的路径清除超时,否则呼叫将挂起300000年😀// This timeout ensure that postman will not close the connection before completing async tasks.
// - it must be cleared once all tasks are completed or it will hang
const interval = setTimeout(() => {}, Number.MAX_SAFE_INTEGER);
let promiseNumber = 0;
function resolvedPromise() {
return new Promise((resolve, reject) => {
pm.sendRequest('https://postman-echo.com/get', (err, res) => {
if (err) {
console.log(err);
reject();
} else {
console.log(`Resolved promise ${++promiseNumber}`);
resolve();
}
});
});
}
resolvedPromise()
.then(resolvedPromise)
.then(resolvedPromise)
.then(() => clearTimeout(interval))
.catch(err => {
console.log(err);
clearTimeout(interval);
});
现在它打印预期结果:
Resolved promise 1
Resolved promise 2
Resolved promise 3
这篇关于如何在邮递员考试中使用承诺?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文