Javascript 如何在承诺数组中引用对象值?

Javascript 如何在承诺数组中引用对象值?,javascript,arrays,object,promise,Javascript,Arrays,Object,Promise,下面的对象包含查找键,其中包含一个数组,用于对值运行一系列验证 如何从电子邮件访问全名的值 const-config={ 全名:[ val=>新承诺((解决,拒绝)=>解决(val)), val=>新承诺((解决,拒绝)=>解决(val)) ], 电邮:[ val=>新承诺((解决,拒绝)=>解决(val)), val=>newpromise((resolve,reject)=>reject(`${config.full\u name.val}`))//获取已传递给full\u name的值 ]

下面的对象包含查找键,其中包含一个数组,用于对
运行一系列验证

如何从
电子邮件
访问
全名
的值

const-config={
全名:[
val=>新承诺((解决,拒绝)=>解决(val)),
val=>新承诺((解决,拒绝)=>解决(val))
],
电邮:[
val=>新承诺((解决,拒绝)=>解决(val)),
val=>newpromise((resolve,reject)=>reject(`${config.full\u name.val}`))//获取已传递给full\u name的值
]
}

config.full\u name.val
不存在,因为
config.full\u name
是一个包含返回承诺的函数的数组

这里的用例取决于如何调用这些函数的上下文。此处解释了此上下文:

还考虑到验证部分与实际配置位于不同的模块中,因此不能简单地访问回调中的formData

但是,您可以向函数回调中添加上下文参数,以提供要访问的formData,如下所示:

请参见这一行(在验证器fn中):

这基本上提供了formData作为上下文参数,可在以后使用:

(val, ctx) => new Promise((resolve, reject) => setTimeout(() => {
  reject(`${ctx.name} already is exists.`) // simulate a HTTP request
}, 2000))

您还可以实现如下类似的功能:

函数提示器(val,pass=true){
返回新承诺(函数(v,x){
回程通行证?v(val):x(val);
});
}
var config={full_name:[promisifier,promisifier],
电子邮件:[承诺人,承诺人]
};
配置全名[0](“Thaddeus Jones”)
.then(r=>config.email[1](r,false))
.then(r=>console.log(“解析者:”,r))

.catch(e=>console.log(“接收到的错误:”,e))应该是这样的。但是它是
全名
不是
全名
。谢谢,我已经调整了,没有。。这不起作用。谢谢,这是一个很好的解决方案,尽管我希望能够在不必解决承诺的情况下引用
val
。根据您的建议,
config.full_name
需要解析
val
。我已修改了我的问题,以返回传递给每个承诺的值,您的解决方案将失败,因为
full\u name
传递的是一个空值。我也知道
config.full\u name.val
不可能,但将其用作我希望在
电子邮件
数组中实现的一个示例。那么,您到底想用它实现什么呢?如果没有这个配置如何使用的上下文,很难理解。您是否在调用电子邮件函数之前调用全名函数,并且希望传递到该函数的值稍后可用(例如,当电子邮件承诺完成时?)在这种情况下,您已经可以访问formData-例如,只需使用formData.name这是一种有趣的方法。虽然数组中的每个承诺都将执行不同的操作。@Karl Bateman为了清楚起见,我使用了一个虚拟承诺器,不重复承诺返回函数。如果在实际代码中,您的数组项是承诺返回实体,那么此模式应该可以正常工作。感谢您的回答,我需要在
config
的上下文中访问该值,这实际上是一个模块,因为可以根据输入加载各种配置。有关示例用例,请参见。
(val, ctx) => new Promise((resolve, reject) => setTimeout(() => {
  reject(`${ctx.name} already is exists.`) // simulate a HTTP request
}, 2000))