Defining the promise type
发布于 10 年前 作者 CommanderXL 4678 次预览 最后一次回复是 10 年前 来自 问答
123
function Promise(fn) {
var callback = null;
this.then = function(cb) {
callback = cb;
};
function resolve(value) {
setTimeout(function() {
callback(value);
}, 1);
}
fn(resolve);
}
function doSomething() {
return new Promise(function(resolve) {
var value = 42;
resolve(value);
});
}
doSomething().then(function(data){
console.log("got the data "+data);//输出"got the data 42"
})
这段代码感觉理解起来有点困难,特别是函数的传递和匿名函数的传值。不是很懂
5 回复
本质上它是这样的:
以上的代码就是标准的规范写法,但这种写法,会有回调地狱的问题,所以 Promise 来了,采用链式操作避免回调地狱同时增加代码可读性。像 doSomething().then(…)这样的代码是要比使用 callback 容易理解得多的。
这个示例中:
@klesh
这个地方传的形参cb能不能理解成传入
then( )里面的函数或者对象?这里, fn = doSomething 在 Promise 里 resolve 没有被调用,它被创建后传给了 doSomething 。没有括号就只是传值,而不是调用。函数的创建和调用是两个概念。 在 doSomething 里,那个 resolve 就是 Promise 里面创建后,传给 fn 的 resolve。
@klesh 在then( )里面传递的函数的
是不是和在Promise里传递的resolve应该是对等的?
不是,这个是 resolve 后被调用的 callback。这些都是些基本概念,讲起来太长,建议找些介绍 javascript 的文章研究一下,特别是介绍函数式编程和闭包之类的文章,另外手动写代码去验证自己的理解很重要。另外可以看下《深入浅出NODE.JS》,多看 上面有电子版卖,几十块钱很值。