<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> </head> <body> <script type="text/javascript"> const p1 = new Promise(function (resolve, reject) { setTimeout(() => resolve("test"), 2000) }) const p2 = new Promise(function (resolve, reject) { //经过调试发现,resolve的内容和状态能被传入的promise实例覆盖,如果是reject则不能被覆盖。 setTimeout(() => reject(p1), 3000) }) console.log(p1); console.log(p2); p2 .then(function(result) { console.log(result); return "chenyujie";}) .catch(function(error ) { console.log("testsss"); console.log(error); return p2;}) .then(function(result) { console.log(result); console.log(this);}, function(error){ console.log("zhongguo"); console.log(error); }) // .catch(result => { // console.log(result); // }) </script> </body> </html>
then函数返回一个promise对象,promise对象有两个基本属性,状态和结果,其中then回调函数的返回值如果是字符串则直接为结果,状态为fulfilled,如果返回值为promise对象,则以对象状态和结果为准。(具体情况可以调试看,不一定准确,该对象有点麻烦)