这里的resolve和then有什么区别吗
来源:2-8 异步代码的测试方法(2)

JUNYIZhang
2019-07-29
写回答
2回答
-
小学生6年级
2020-03-07
主要这里我也有点好奇源码怎么实现的就看了一下。then 相关的我就不罗嗦了就正常逻辑。关键在于 resolve的。
在源码中的 expect 函数中会构造这些 matcher,其中有一段如下:
expectation.resolves.not[name] = makeResolveMatcher( name, promiseMatcher, true, actual, err, );
记住这里 actual 就是我们传入的那个参数,然后接着看 makeResolveMatcher 函数中的返回值为
return actual.then( result => makeThrowingMatcher(matcher, isNot, 'resolves', result, innerErr).apply( null, args, ), reason => { outerErr.message = matcherUtils.matcherHint(matcherName, undefined, '', options) + '\n\n' + `Received promise rejected instead of resolved\n` + `Rejected to value: ${matcherUtils.printReceived(reason)}`; return Promise.reject(outerErr); }, );
不用看其他,你就看到 actual.then 就知道了实际上此处等于阻塞住了,也就是 expect 之后的链式操作会在 .then 之后执行。 .then 中的 result 就代表我们拿到的 fetchData 。
00 -
Dell
2019-07-30
resolve 触发后 then中的回掉函数执行
012019-07-30
相似问题