[英]How can I reference an object value within an array of promises?
下面的對象包含含有用於運行一系列針對驗證的承諾的陣列查找密鑰value
。
如何通過email
訪問full_name
的值?
const config = {
full_name: [
val => new Promise((resolve, reject) => resolve(val)),
val => new Promise((resolve, reject) => resolve(val))
],
email: [
val => new Promise((resolve, reject) => resolve(val)),
val => new Promise((resolve, reject) => reject(`${config.full_name.val}`)) // get the value which has been passed to full_name
]
}
config.full_name.val
不存在,因為config.full_name
是具有返回promise函數的數組。
這里的用例取決於如何調用這些功能的上下文。 此處說明了此上下文: https : //jsfiddle.net/karlbateman/keqnrybq/ 。
還考慮到驗證部分與實際配置位於不同的模塊中,因此不能簡單地在回調中訪問formData。
但是,您可以在函數回調中添加上下文參數,以提供要訪問的formData,如下所示: https ://jsfiddle.net/odolha/tpn75570/
參見以下行(在validatorFn中):
arr.push(config[field].map(cb => cb(formData[field], formData)))
這基本上提供了formData作為上下文參數,可以在以后使用:
(val, ctx) => new Promise((resolve, reject) => setTimeout(() => {
reject(`${ctx.name} already is exists.`) // simulate a HTTP request
}, 2000))
您還可以實現以下類似功能;
function promisifier(val, pass = true){ return new Promise(function(v,x){ return pass ? v(val) : x(val); }); } var config = { full_name: [promisifier, promisifier], email: [promisifier, promisifier] }; config.full_name[0]("Thaddeus Jones") .then(r => config.email[1](r,false)) .then(r => console.log("resolved by:", r)) .catch(e => console.log("received error:", e));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.