javascript 链接承诺澄清
javascript chaining promises clarification
我正在尝试理解 javascript 中承诺的概念。
我看过这段代码:
new Promise(function(res,rej) {
res("aaa");
})
.then(function(result) {
console.log(result);
return "bbb";
})
.then(function(result) {
console.log(result);
return "ccc";
})
.then(function(result) {
console.log(result);
});
它打印:
aaa
bbb
ccc
到控制台日志。
几个问题:
是then()
方法第一个参数是一个将运行作为resolve()
方法的函数吗?
是 then()
方法也是 return 一个值,它是一个承诺,这个承诺与它链接到的承诺(它的父级)是相同的承诺 只有它的resolve()
方法的值是then()
?
[=里面的resolve()
方法的值return 50=]
这个承诺是:
var myPromise = new Promise(function(res,rej) {
res("aaa");
})
.then(function(result) {
console.log(result);
return "bbb";
})
是否等同于下面这个承诺?
var myPromise = new Promise(function(res,rej) {
res("bbb");
})
此外,当 then()
接受承诺时会发生什么?
就像这个例子一样?
var firstMethod = function() {
var promise = new Promise(function(resolve, reject){
setTimeout(function() {
console.log('first method completed');
resolve({data: '123'});
}, 2000);
});
return promise;
};
var secondMethod = function(someStuff) {
var promise = new Promise(function(resolve, reject){
setTimeout(function() {
console.log('second method completed');
resolve({newData: someStuff.data + ' some more data'});
}, 2000);
});
return promise;
};
var thirdMethod = function(someStuff) {
var promise = new Promise(function(resolve, reject){
setTimeout(function() {
console.log('third method completed');
resolve({result: someStuff.newData});
}, 3000);
});
return promise;
};
firstMethod()
.then(secondMethod)
.then(thirdMethod);
- then方法的第一个参数是解析函数,第二个参数是拒绝函数。
var resolvedPromise = new Promise(function(res,rej){ res({data: 7}) });
var rejectedPromise = new Promise(function(res,rej){ rej('error!!!!') });
resolvedPromise.then(function(res){ console.log('resolved:' + JSON.stringify(res)); }, function (err){ console.log('rejected:' + err); });
rejectedPromise.then(function(res){ console.log('resolved:' + JSON.stringify(res)); }, function (err){ console.log('rejected:' + err); });
- then 方法 return 是一个基于前一个承诺的 return 类型的承诺。
var promise = new Promise(function(res,rej){ res({data: 7}) });
promise.
then(function(res){ console.log(res); return res.data; }).
then(function(res){ console.log(res); return res + 1; }).
then(function(res){ console.log(res);});
- 没有。第一个代码将记录 "aaa" 和 return 带有 "bbb" 的承诺,而第二个代码将 return "bbb" 不记录 "aaa";
我正在尝试理解 javascript 中承诺的概念。
我看过这段代码:
new Promise(function(res,rej) {
res("aaa");
})
.then(function(result) {
console.log(result);
return "bbb";
})
.then(function(result) {
console.log(result);
return "ccc";
})
.then(function(result) {
console.log(result);
});
它打印:
aaa
bbb
ccc
到控制台日志。
几个问题:
是
then()
方法第一个参数是一个将运行作为resolve()
方法的函数吗?是
[=里面的then()
方法也是 return 一个值,它是一个承诺,这个承诺与它链接到的承诺(它的父级)是相同的承诺 只有它的resolve()
方法的值是then()
?resolve()
方法的值return 50=]这个承诺是:
var myPromise = new Promise(function(res,rej) { res("aaa"); }) .then(function(result) { console.log(result); return "bbb"; })
是否等同于下面这个承诺?
var myPromise = new Promise(function(res,rej) {
res("bbb");
})
此外,当 then()
接受承诺时会发生什么?
就像这个例子一样?
var firstMethod = function() {
var promise = new Promise(function(resolve, reject){
setTimeout(function() {
console.log('first method completed');
resolve({data: '123'});
}, 2000);
});
return promise;
};
var secondMethod = function(someStuff) {
var promise = new Promise(function(resolve, reject){
setTimeout(function() {
console.log('second method completed');
resolve({newData: someStuff.data + ' some more data'});
}, 2000);
});
return promise;
};
var thirdMethod = function(someStuff) {
var promise = new Promise(function(resolve, reject){
setTimeout(function() {
console.log('third method completed');
resolve({result: someStuff.newData});
}, 3000);
});
return promise;
};
firstMethod()
.then(secondMethod)
.then(thirdMethod);
- then方法的第一个参数是解析函数,第二个参数是拒绝函数。
var resolvedPromise = new Promise(function(res,rej){ res({data: 7}) });
var rejectedPromise = new Promise(function(res,rej){ rej('error!!!!') });
resolvedPromise.then(function(res){ console.log('resolved:' + JSON.stringify(res)); }, function (err){ console.log('rejected:' + err); });
rejectedPromise.then(function(res){ console.log('resolved:' + JSON.stringify(res)); }, function (err){ console.log('rejected:' + err); });
- then 方法 return 是一个基于前一个承诺的 return 类型的承诺。
var promise = new Promise(function(res,rej){ res({data: 7}) });
promise.
then(function(res){ console.log(res); return res.data; }).
then(function(res){ console.log(res); return res + 1; }).
then(function(res){ console.log(res);});
- 没有。第一个代码将记录 "aaa" 和 return 带有 "bbb" 的承诺,而第二个代码将 return "bbb" 不记录 "aaa";