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。那么为什么我可以在他们外面等待呢?