簡體   English   中英

如何在一個promise數組中引用一個對象值?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM