首页 > 解决方案 > 是在里面等待还是在外面期待?

问题描述

有什么区别:

it('should blabla', async () => {
    await expect(callThatReturnsAPromise()).toBe(false);
});

和:

it('should blabla', async () => {
    expect(await callThatReturnsAPromise()).toBe(false);
});

那么,在 expect 函数的外部还是内部等待?

如果 toBe 内部的调用也返回一个 promise,我应该使用哪个版本呢?

it('should blabla', async () => {
    await expect(callThatReturnsAPromise()).toBe(callThatReturnsAPromise2());
});

或者:

 it('should blabla', async () => {
     expect(await callThatReturnsAPromise()).toBe(await callThatReturnsAPromise2());
 });

那么,期望之外的等待会解决所有的承诺,还是我必须在函数内等待它们中的每一个?

好的,我使用以下代码进行了测试:

let a = function() {
        console.log('huba');
        return new Promise((resolve, reject) => {
            setTimeout(() => {
                resolve(42);
            }, 5000);
        });
    };

    let b = function() {
        console.log('buba');
        return new Promise((resolve, reject) => {
            setTimeout(() => {
                resolve(11);
            }, 5000);
        });
    };

    describe('test', function() {
        it('blabla', async function() {
            await expect(a()).toBe(b());
        });
    });

并且似乎期望之外的等待等待承诺 a() 和 b() 得到解决。但我不知道为什么。既不期望不返回承诺也不返回。那么为什么我可以在他们之外等待呢?

标签: javascriptpromiseasync-awaitjasmine

解决方案


推荐阅读