14、Promise链式调用多个不同函数的用法

14、Promise链式调用多个不同函数的用法

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
    <script src="https://cdn.bootcss.com/jquery/1.12.4/jquery.js"></script>
    <script type="text/javascript">
    
    function cook() {
        console.log('开始做饭。');
        var p = new Promise(function(resolve, reject){ 
            setTimeout(function() {
                console.log('做饭完毕!');
                resolve('鸡蛋炒饭');
     
            }, 1000);
        });
        return p;
    }
    
    function eat(data) {
        console.log('开始吃饭:' + data);
        var p = new Promise(function(resolve, reject) {
            setTimeout(function() {
                console.log('吃饭完毕!');
                resolve('一块碗和一双筷子');
            }, 2000);
        });
        return p;
    }
    function wash(data) {
        console.log('开始洗碗:' + data);
        var p = new Promise(function(resolve, reject) { 
            setTimeout(function() {
                console.log('洗碗完毕!');
                resolve('干净的碗筷');
            }, 2000);
        });
        return p;
    }
//补充代码
// console.log(cook());
    // cook()
    // .then( (data) => {
    //     eat(data)
    // .then( (data) => {
    //     wash(data)
    // .then( (data) => {
    //     console.log(data);
    //         });
    //     })
    // })
    // 上面的写法也没问题为什么?
    
    cook()
    .then( (data) => {
    return eat(data)
    })
    .then( (data) => {
    return wash(data)
    })
    .then( (data) => {
        console.log(data);
    });    
</script>
</body>
</html>

1、// resolve()方法执行的意义是告诉实例化的Promise对象可以执行.then(下一步操作)了(这里指then中的匿名函数了),同时还可以在resolve()方法的括号中传递数据。

2、// return的作用是返回Promise实例对象和resolve的data数据的,Promise实例对象才有then方法,而resolve的data数据只有return后才能传递给下个方法使用。

3、注释上面的写法也没问题为什么?
看看我前面两点理解的对不对。

正在回答

登陆购买课程后可参与讨论,去登陆

3回答

同学你好,是的哦。

希望能帮助到你,祝学习愉快!

好帮手慕糖 2019-10-18 10:07:17

同学你好,可以将resolve的调用去掉,会发现后面的then不会执行。

“2-1 回调与Promise”这个课程中是有讲过的哦,在4分左右的时候,可以结合如下理解在回顾下哦。

http://img1.sycdn.imooc.com//climg/5da91df60919c8bd08380926.jpg

希望能帮助到你,祝学习愉快!

  • 意思说resolve()函数调用,实际上是执行then里面的匿名函数,并且能传参?
    2019-10-18 17:58:59
好帮手慕糖 2019-10-17 13:56:53

同学你好,1、2、可以这里理解哦。resolve是回调函数,对应的是then的匿名函数。且上一个then方法的返回值,可以作为下一个then方法中函数的参数。

http://img1.sycdn.imooc.com//climg/5da8016809bb0fea00000000.jpg

3、这个写法相当于嵌套使用了哦,就是之前课程中的函数调用中接着嵌套函数调用。

http://img1.sycdn.imooc.com//climg/5da800b709e82f0c06120345.jpg

而我们的then方法,建议:使用下面这种,一个方法执行完,在执行另一个。

http://img1.sycdn.imooc.com//climg/5da800ed09a22eeb03790314.jpg

希望能帮助到你,祝学习愉快!

  • resolve是回调函数,对应的是then的匿名函数。这句话不理解,你把resolve函数和对应的是then的匿名函数,完整的写出来我对比一下,看下他们怎么执行的
    2019-10-17 20:16:24
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师