简体   繁体   English

通过解决,拒绝外部承诺到内部承诺

[英]Passing resolve, reject of outer Promise to inner Promise

I have a basic promise code which works as below 我有一个基本的承诺代码,如下所示

 new Promise(function(resolve, reject) { new Promise(function(resolveInner, rejectInner) { // do something resolveInner('resolved inner promise') }).then(function(msg) { console.log(msg); // do something resolve("resolved from inner") }).catch(function(msg) { console.log('error' + msg) }) }).then(function(msg) { console.log(msg) }) 

I am trying to refactor and modularize the code by bringing the innerResolve function outside like below. 我试图通过将innerResolve函数带到外部来重构和模块化代码,如下所示。 This errors out as 'resolve' is undefined 由于“解决”是未定义的错误

 new Promise(function(resolve, reject) { new Promise(function(resolveInner, rejectInner) { // do something resolveInner('resolved inner promise') }).then(innerResolve) // externalized here !!!! .catch(function(msg) { console.log('error' + msg) }) }).then(function(msg) { console.log(msg) }) function innerResolve(msg) { console.log(msg); // do something resolve("resolved from inner") } 

How do I bring outer Promise resolve to innerResolve function? 如何将外部Promise分解带入innerResolve函数?

One solution is to create a global variable which could be set to outer promise resolve for example. 一种解决方案是创建一个全局变量,例如可以将其设置为外部promise resolve。

 var _resolve; new Promise(function(resolve, reject) { _resolve = resolve new Promise(function(resolveInner, rejectInner) { // do something resolveInner('resolved inner promise') }).then(innerResolve).catch(function(msg) { console.log('error' + msg) }) }).then(function(msg) { console.log(msg) }) function innerResolve(msg) { console.log(msg); // do something _resolve("resolved from inner") } 

Is there a better approach without global variables? 有没有全局变量的更好方法吗?

Your situation seems really convoluted, so you might want to re-evaluate why you need to do this at all, but if it is simply experimenting, you can solve this without globals, by passing the appropriate resolver to a function generator. 您的情况似乎真的很复杂,因此您可能要重新评估为什么需要执行此操作,但是如果只是进行试验,则可以通过将适当的解析器传递给函数生成器来解决此问题,而无需使用全局变量。 For example: 例如:

 const innerResolve = resolver => msg => { console.log(msg); // do something resolver("resolved from inner") } new Promise(function(resolve, reject) { new Promise(function(resolveInner, rejectInner) { // do something resolveInner('resolved inner promise') }).then(innerResolve(resolve)).catch(function(msg) { console.log('error' + msg) }) }).then(function(msg) { console.log(msg) }) 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM