如何在邮递员考试中使用承诺? [英] How to use Promises in Postman tests?

查看:20
本文介绍了如何在邮递员考试中使用承诺?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要在我的邮递员测试中使用一些异步代码。

因为这是一个复杂的场景,所以我用以下代码在一个非常简单的测试中重现了该场景:

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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆