在里面等待还是在外面期待?

Gar*_*lon 6 javascript promise async-await jasmine

有什么区别:

it('should blabla', async () => {
    await expect(callThatReturnsAPromise()).toBe(false);
});
Run Code Online (Sandbox Code Playgroud)

和:

it('should blabla', async () => {
    expect(await callThatReturnsAPromise()).toBe(false);
});
Run Code Online (Sandbox Code Playgroud)

那么,await 是在expect 函数外部还是内部呢?

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

it('should blabla', async () => {
    await expect(callThatReturnsAPromise()).toBe(callThatReturnsAPromise2());
});
Run Code Online (Sandbox Code Playgroud)

或者:

 it('should blabla', async () => {
     expect(await callThatReturnsAPromise()).toBe(await callThatReturnsAPromise2());
 });
Run Code Online (Sandbox Code Playgroud)

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

好的,我用这段代码进行了测试:

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());
        });
    });
Run Code Online (Sandbox Code Playgroud)

看起来expect之外的await等待promise a()和b()得到解决。但我不知道为什么。Expect 和 toBe 都不会返回 Promise。那么为什么我可以在他们外面等待呢?