关于异步与回调函数的疑问
请问回调函数之所以产生异步是因为在编译的过程中先编译外围的函数,然后再调用编译括号内的函数,然后一直编译下去,就形成了一步一步的异步,对吗?
还有一个疑问,在Promise中,then函数是默认有一个result参数吗,而这个result的值是resolve函数返回值吗?
6
收起
正在回答 回答被采纳积分+1
2回答
ccmouse
2022-10-06 15:19:21
这个和编译没有关系。回调和异步都发生在运行时。这些问题需要先深入理解函数式编程。建议结合之前章节一起看。
我们以这个文档做例子。
// callback 形式调用 wx.chooseImage({ success(res) { console.log('res:', res) }}) // promise 形式调用 wx.chooseImage().then(res => console.log('res: ', res))
callback形式,chooseImage函数的参数是一个函数。但是这个函数此时只是一些代码(准确的说,一个闭包),并没有被运行。
流程上,chooseImage要弹框让用户选择图片。用户选完之后,chooseImage函数才把选择的图片作为参数res调用这个一开始传进来的success函数。
实际上,chooseImage本身也和下面的比如弹文件选取对话框等进行异步交互。chooseImage发起了弹框之后就立刻返回了。chooseImage之后的代码会先被运行。当用户选择完文件后,chooseImage交给下层的回调被调用,在那里,进行了一些文件名,返回值的包装等,再作为res参数调用success。
promise形式的运行过程和callback模式一样,只是代码简洁易懂。then的参数也是一个函数,这个函数的参数就是resolve中传入的内容。
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星