Javascript 重写弗兰肯斯坦的承诺链
所以我把这个讨厌的东西带到了生活中,我一辈子都不知道如何优化它,这样我就可以使用Promise.all/Promise.join正确地运行这个链条 有人能给我指出正确的方向吗?应该首先分离这些方法 任何见解都值得赞赏Javascript 重写弗兰肯斯坦的承诺链,javascript,node.js,asynchronous,bluebird,Javascript,Node.js,Asynchronous,Bluebird,所以我把这个讨厌的东西带到了生活中,我一辈子都不知道如何优化它,这样我就可以使用Promise.all/Promise.join正确地运行这个链条 有人能给我指出正确的方向吗?应该首先分离这些方法 任何见解都值得赞赏 getOpenIDConf:function(){ 返回客户端 .getAsync('openId')) .那么( 功能(结果){ 如果(!结果){ 退货申请 .getAsync({ 网址:'https://accounts.google.com/.well-known/open
getOpenIDConf:function(){
返回客户端
.getAsync('openId'))
.那么(
功能(结果){
如果(!结果){
退货申请
.getAsync({
网址:'https://accounts.google.com/.well-known/openid-configuration',
json:true
}).传播(
功能(响应、主体){
var result=JSON
.将(主体)字符串化;
client.setAsync('openId',
结果)然后(
函数(){
返回结果;
});
});
}否则{
返回结果;
}
});
},
good promise库(不确定您使用的是哪一个)的一些功能是,您可以像这样链接承诺:
doSomething(function(result) {
return doSomethingElse();
}).then(function(result2) {
return doSomethingElseAgain();
}).then(function(result3) {
// It all worked!
}).catch(function() {
// Something went wrong
});
或者,您可以等待一组数据完成:
var promiseArray = [];
promiseArray.push(doSomething());
promiseArray.push(doSomethingElse());
promiseArray.push(doSomethingElseAgain());
Promise.all(promiseArray).then(function() {
// It all worked!
}).catch(function() {
// Something went wrong
});
希望这是有用的。good promise库(不确定您使用的是哪一个)的一些功能是,您可以像这样链接承诺:
doSomething(function(result) {
return doSomethingElse();
}).then(function(result2) {
return doSomethingElseAgain();
}).then(function(result3) {
// It all worked!
}).catch(function() {
// Something went wrong
});
或者,您可以等待一组数据完成:
var promiseArray = [];
promiseArray.push(doSomething());
promiseArray.push(doSomethingElse());
promiseArray.push(doSomethingElseAgain());
Promise.all(promiseArray).then(function() {
// It all worked!
}).catch(function() {
// Something went wrong
});
希望这是有用的信息。重构一点并更改代码样式可以实现这一点
getOpenIDConf:()=>client.getAsync('openId')。然后(结果=>
结果| | request.getAsync({
网址:'https://accounts.google.com/.well-known/openid-configuration',
json:true
}).get(1).then(JSON.stringify).then(result=>
setAsync('openId',result.).return(result);
)
)
},
重构一点并更改代码样式可以实现这一点
getOpenIDConf:()=>client.getAsync('openId')。然后(结果=>
结果| | request.getAsync({
网址:'https://accounts.google.com/.well-known/openid-configuration',
json:true
}).get(1).then(JSON.stringify).then(result=>
setAsync('openId',result.).return(result);
)
)
},
这真的有效吗?你永远不能返回承诺的结果。您只能返回承诺本身。我似乎刚刚得到了结果。您是想返回client.setAsync吗(…
在排列回调中?这真的很奇怪。返回的唯一方法是如果函数不是异步的。异步函数只能从回调中获得结果。如果是承诺,则返回允许您将回调传递给的承诺。然后()
方法。您永远不能从异步函数返回结果。无论您使用的是承诺还是常规回调,您只能从回调中获取结果。@slebetman我猜他没有测试实际有效的!result
case yetdoos?您永远不能返回承诺的结果。您只能返回promise本身。我似乎刚刚得到了结果。您是指返回client.setAsync吗(…
在排列回调中?这真的很奇怪。返回的唯一方法是如果函数不是异步的。异步函数只能从回调中获得结果。如果是承诺,则返回允许您将回调传递给的承诺。然后()
方法。你永远不能从异步函数返回结果。无论你是使用承诺还是常规回调,你只能从回调中获取结果。@slebetman我猜他没有测试过!result
案例是的。除了if/else之外,代码在清洁度方面“正常”?主要关注(ab)不正确地使用承诺。@KevinToet事实上,if/else也是一个偏好问题。在我看来,你没有滥用承诺。滥用承诺是在你不需要的时候嵌套了大量回调。你使用的lambda注释是什么?Eclipse很适合。你能解释一下get(1)吗?@KevinToet返回一个使用上一个承诺中的指定参数进行解析的承诺。由于您只需要body
,因此使用get
为您保存了一个spread
。这是node中提供的一个新ES6功能。如果您使用的是node 0.12,您将不得不使用常规函数。非常感谢您的帮助Horoughness除了if/else之外,代码在清洁度方面是“正常”的?主要关注(ab)不正确地使用承诺。@KevinToet事实上,if/else也是一个偏好问题。在我看来,你没有滥用承诺。滥用承诺是在你不需要的时候嵌套了大量回调。你使用的lambda注释是什么?Eclipse很适合。你能解释一下get(1)吗?@KevinToet返回一个使用上一个承诺中的指定参数进行解析的承诺。由于您只需要body
,因此使用get
为您保存了一个spread
。这是node中提供的一个新ES6功能。如果您使用的是node 0.12,您将不得不使用常规函数。非常感谢您的帮助粗糙度