javascript - 初识JS中的Promise的两个基础问题
PHP中文网
PHP中文网 2017-04-11 11:45:32
[JavaScript讨论组]

刚开始学习JavaScript中的promise,看到一篇不错的文章,但是产生了两个小问题。文中有这样一段代码:

var promise = new Promise(function(resolve, reject) {
  resolve(1);
});

promise.then(function(val) {
  console.log(val); // 1
  return val + 2;
}).then(function(val) {
  console.log(val); // 3
});

对于上面的调用有点疑惑,平时所见的相似的调用大概是string.split('').reverse()这样的,是把字符转化为数组之后由数组调用它的reverse方法。可是上面的代码return的是一个数值数值怎么还能调用后续的then方法呢?后面还有一段话:

当你从 then 的回调函数返回的时候,这里有点小魔法。如果你返回一个值,它就会被传给下一个 then 的回调;而如果你返回一个“类 Promise”的对象,则下一个 then 就会等待这个 Promise 明确结束(成功/失败)才会执行。

这样就说明了其实上面的代码其实是调用了两次promise的then方法?这样感觉有点怪怪的,和我之前所说的字符-->数组-->数组的reverse这个例子似乎有点不搭。

第二个问题是上面那段话中的“类 Promise”的对象到底是什么?如何突出这个“类”字呢?百度了一下似乎没有发现。。

刚开始学习,见谅~

PHP中文网
PHP中文网

认证高级PHP讲师

全部回复(5)
阿神

then返回的是一个新的promise对象

ringa_lee

当你从 then 的回调函数返回的时候,这里有点小魔法

注意then 的回调函数返回,所以数字是then的回调函数的返回值,不是then()的返回值。
类promise可以理解为promise对象,和promise类似的对象。
下方传送门里的问题中有一个then的回调返回一个promise对象的例子
传送门

伊谢尔伦

谢邀,我说一个想法吧。无非就是里面做了一下处理。判断你的值是什么。然后处理一下。例子不怎么好。你先看看吧。我找找有没有其他人仿写的。

function then(fun){
    var _return = fun();
    if(typeof _return === "string"){
       return "这是一个String参数"
    }else if(typeof _return == "object"){
       return "这是一个object参数"
    }else{
       return _return
    }
}
黄舟

如果一个普通对象,拥有then字段,并且then字段的值是一个函数,那么它就是一个类Promise对象。例如

var likePromise = {
    then: function (resolve, reject) {
        resolve(1);
    }
}
迷茫

resolve()可以是任何东西的,你结合async看

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号