关于链接es6 Promises,然后()和价值消费
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于链接es6 Promises,然后()和价值消费相关的知识,希望对你有一定的参考价值。
这与Chaining .then() calls in ES6 promises紧密相连......
我尝试了一些构成一系列承诺的函数,所以基本上:
var PromiseGeneratingMethod = function(){
return p = new Promise((resolve, reject) =>{
resolve(1)
});
}
var inBetweenMethod = function(){
return PromiseGeneratingMethod()
.then((resolved) => {
if(resolved){
console.log('resolved in between');
//return resolved
/* this changes output to
resolved in between
resolved at last*/
}else{
console.log('something went terribly wrong in betweeen', resolved);
}
});
}
inBetweenMethod().then((resolved) =>{
if(resolved){
console.log('resolved at last')
}else{
console.log('something went terribly wrong', resolved);
}
})
/* ouput:
resolved in between
something went terribly wrong undefined*/
我不明白为什么会这样。没有Promise只有一个相关的返回值?我为什么每次都能改变这个价值?这对我来说似乎是不合理的。一个Promise对象只能有一个返回值,我认为每个处理程序在Promise解析后都会收到相同的参数?
这样,有两个方法在同一个Promise上调用then(),后一个(在异步环境中你永远不知道那是什么......)将总是得到一个空结果,除非每个返回所需的值
如果我做对了,唯一的好处是你可以构建一个then()。then()。then()链使它几乎同步(通过在每个then()中返回任意值)但你仍然可以实现与嵌套的Promises相同,对吗?
有人可以帮助我理解为什么es6 Promises会以这种方式工作,如果有更多的警告要使用它们?
没有承诺只有一个相关的返回值?
是。
我为什么每次都能改变这个价值?
因为每个.then()
电话确实会返回一个新的承诺。
有两个方法在同一个Promise上调用then()
这不是你正在做的事情。你的then
回调安装在不同的承诺上,这就是他们获得不同价值的原因。
你可以做到
function inBetweenMethod() {
var promise = PromiseGeneratingMethod();
promise.then(resolved => { … }); // return value is ignored
return promise;
}
但你应该真的避免这种情况。您已经注意到您可以获得预期的行为
function inBetweenMethod() {
var promise = PromiseGeneratingMethod();
var newPromise = promise.then(value => {
…
return value;
});
return newPromise;
}
使用回调返回的值来解析newPromise
- 可能与promise
实现的值相同。
您使用.then()
处理程序两次,执行以下操作:
var PromiseGeneratingMethod = function(){
return new Promise((resolve, reject) =>{
if (myCondition) resolve(1)
if (!myCondition) reject("failed")
});
}
var inBetweenMethod = function(){
return PromiseGeneratingMethod()
}
inBetweenMethod().then((resolved) =>{
console.log(resolved)
}).catch(function(err) {
console.log(err)
})
以上是关于关于链接es6 Promises,然后()和价值消费的主要内容,如果未能解决你的问题,请参考以下文章
ES6 Promises - 类似 async.each 的东西?
Promisifying xml2js 解析函数(ES6 Promises)
[Node.js] Testing ES6 Promises in Node.js using Mocha and Chai