Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 重写弗兰肯斯坦的承诺链_Javascript_Node.js_Asynchronous_Bluebird - Fatal编程技术网

Javascript 重写弗兰肯斯坦的承诺链

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

所以我把这个讨厌的东西带到了生活中,我一辈子都不知道如何优化它,这样我就可以使用Promise.all/Promise.join正确地运行这个链条

有人能给我指出正确的方向吗?应该首先分离这些方法

任何见解都值得赞赏

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,您将不得不使用常规函数。非常感谢您的帮助粗糙度