Validacion de formulario async con angular reactive form

Tengo problema, no consigo que se de la validación asíncrona con los reactive form en angular. Consigo que se mantenga la consulta activa al escribir sobre el input y me trae resultados pero no logro mandar el error en el html. Soy nuevo en angular y no se que me estaría faltando en el codigo.

Component.ts

this.registroForm = this.fb.group({   nombre: ["", [Validators.required, Validators.pattern("[a-zA-Z ]*")]],   apellido: ["", [Validators.required, Validators.pattern("[a-zA-Z ]*")]],   username: [     "",     [Validators.required, this.validateEmailNotTaken.bind(this)]   ],   email: ["", [Validators.required, Validators.pattern(this.emailPattern)]],   telefono1: [     "",     [       Validators.required,       Validators.maxLength(10),       Validators.minLength(10),       Validators.pattern("[0-9]*")     ]   ],   condiciones: ["", [Validators.required]] }); 

Mi Funcion de validacion: Va comprobando cada vez que escribo en el input, el servidor me responde de la siguiente manera, cuando existe el nombre en la BD me trae los datos de ese en un array de json, sino un array vacio por eso el data.length. Entonces si es igual a uno deberia mostrar el error. Pero el input escribo cualquier cosa y se coloca en rojo sin mostrar un error especifico (Por la validacion de angular material) y aparte no muestra el error en si de que existe o nombre no disponible.

  validateEmailNotTaken(control: AbstractControl) { let username = {   user: control.value }; return this.authService.buscarUserUsername(username).subscribe(   (data: any) => {     console.log(data.length);     if (data.length === 1) {       return { userNameExists: true };     }   },   err => {     console.log(err);   } ); 

}

MI HTML

<mat-form-field appearance="outline" color="accent">            <mat-label>Usuario</mat-label>            <input formControlName="username" matInput placeholder="Nombre de usuario">            <mat-error *ngIf="registroForm.controls['username'].errors?.required">Este campo es obligatorio            </mat-error>            <mat-error *ngIf="registroForm.controls['username'].errors?.pattern">No es un nombre de usuario valido            </mat-error>            <mat-error *ngIf="registroForm.get('username').errors?.userNameExists">              Nombre de usuario no disponible               </mat-error>           </mat-form-field> 

introducir el código aquí

introducir el código aquí 

Task.Run Await Async confundido con BackGroundWorker

Acabo de terminar una aplicación de escritorio (así debe ser) y estoy revisando el código para poder optimizarlo y corregir errores. He encontrado un problema y necesito vuestra ayuda.

MI aplicación se conecta a una API Rest, que tiene ‘endpoints’ PUT, GET and POST según sea el caso. Mi aplicación captura archivos XML, procesa los campos para luego enviarlos a los distintos endpoints. No son cálculos complejos, solo lectura de archivos(muchos). Tengo una barra de progreso que me dió problemas y lo solucioné colocando un ‘backgrounworker’ y ahora creo que lo hice mal. (mi aplicación funciona sin problemas en este momento)

Mis modelos son así:

Public Class ModelPartcipant #Propiedades ... #Funciones          Public Async Function Get() as task(Of ModelPartcipant)          Using c = new HttpClient()          ...          Dim response = await c.GetAsync(url)          Dim JsonBody = Await response.Content.ReadAsStringAsync          If IsSuccesStatusCode Then                   Return JsonConvert.Deserialize(Of ModelPartcipant)(JsonBody, settings)          End If          End Using          End Function End Class 

Llamadas:

Private Sub BackGroundWorker_DoWork () For Each ... Dim result = Task.Run(Function()  ModelPartcipant.Get(..).Result ...(Aquí llamo a varias funciones Async...) ...(Tuve que usar BackGroundWorker porque era la única forma de que la barra de progreso me funcionara de maneraa async...) Next End Sub  Private Sub RunWorkerCompleted ... (Barra de progreso) Private Sub ProgressChanged ... (Barra de progreso) 

Preguntas:

1: Según mi enfoque, está bien usar BackGroundWorker o basta con poner mis funciones la palabra reservada “Async” + “Await” en mis llamadas para poder funcionar correctamente la barra de progreso? Se debe decidir por una de ellas? Creo que estoy haciendo un doble trabajo.

2: Mis llamadas Task.Run llaman a su vez a la propiedad “Result”, creo que el resultado ya viene listo, cree que es innecesaria esta propiedad?

3: Mis métodos HttpClient están siendo cerrados correctamente en cada llamada?

4:Cuando tengo solo 1 llamada en mi función BackGroundWorker sí me sirve poner “Async” + “Await” pero si hay más de una llamada dentro de la función se cuelga.

5: Es mejor usar Task.FromResult or Task.CompletedTask?

6: Alguna otra forma de optimizar mi código?

Gracias

getEnumerator causing collection has not been initialized error inside of async call inside of a loop in a script editor web part

This is an issue I’ve been struggling with – What I am doing is using a script editor web part and when a user clicks the button, I check to see if a list exists inside of a loop (in this example, it could be called Data1 – Data10) and if so, then I want to pull all of the items from that list based on the query, which is based on filters with other controls (Ignore the datepickers/filters – I know the query works)

The problem I’m hitting is that I’m running these async calls inside of my ‘does the list exist’ loop and getting to the getEnumerator line where I receive the error :

Error: The collection has not been initialized. It has not been requested or the request has not been executed. It may need to be explicitly requested.

I had previously posted a simplified version of this question and didn’t receive a response so was hoping if I posted the entirety of my solution that it may give me an answer.

Thanks

    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js "></script>     <link rel="stylesheet" href="//code.jquery.com/ui/1.11.2/themes/smoothness/jquery-ui.css">     <script src="//code.jquery.com/ui/1.11.2/jquery-ui.js"></script>     <script type="text/javascript" language="javascript">      $  (function() {         $  ( "#datepickerStart" ).datepicker();         $  ( "#datepickerEnd" ).datepicker();     });      var valStopped = 10;     var allItems;     function getListData()      {         var _clientContext;         var _web;         _clientContext = new SP.ClientContext.get_current();         _web = _clientContext.get_web();         var lists = _web.get_lists();         _clientContext.load(lists,'Include(Title)');         //Get all lists...         var listTitle = "";         var arrayOfMatchedLists = [];         var responses = {exists:false,record:0};         var arrayOfPromises = [];          for (var j = 1; j < valStopped; j++) //loop through all potential lists and see if they exist         {             listTitle = "Data" + j;             arrayOfPromises.push(get_isListExists(listTitle,j,function(listExists,counter){             if (listExists){                 responses = {exists:listExists,record:counter};                 arrayOfMatchedLists.push(responses);             }             },function(sender,args){}));         }         $  .when.apply($  , arrayOfPromises).done(function() {         var largest = 0;         for (var item in arrayOfMatchedLists)          {         //Get the largest list index             if (arrayOfMatchedLists[item].record > largest)             {                 largest = arrayOfMatchedLists[item].record;             }         }         populateList(largest);             });      }       function populateList(counter)      {      for (var i = 1; i <= counter; i++)         {              var _clientContext;             var _web;             _clientContext = new SP.ClientContext.get_current();             _web = _clientContext.get_web();             var listTitle = "Data" + i; //+ i;             var list = _web.get_lists().getByTitle(listTitle);             var myquery = new SP.CamlQuery();             if ($  ("Data6").val() !== "All") //get Data6 as a filter if it's not all, else don't use Data6 as a filter.             {                 myquery.set_viewXml('<View><ViewFields><FieldRef Name=\'Data1\'/><FieldRef Name=\'Data2\'/><FieldRef Name=\'Data3\'/><FieldRef Name=\'Data4\'/><FieldRef Name=\'Data5\'/><FieldRef Name=\'Data6\'/><FieldRef Name=\'Data7\'/><FieldRef Name=\'Data8\'/><FieldRef Name=\'Data9\'/><FieldRef Name=\'Data10\'/></ViewFields></View>');             }             //else set query as all facilities             allItems = list.getItems(myquery);              _clientContext.load(allItems, 'Include(Data1,Data2,Data3,Data4,Data5,Data6,Data7,Data8,Data9,Data10)');             _clientContext.executeQuery(Function.createDelegate(this, this.onQuerySucceeded()), Function.createDelegate(this, this.onQueryFailed));         }                }      function onQuerySucceeded()      {         var Data1 = null;         var Data2 = null;         var Data3 = null;         var Data4 = null;         var Data5 = null;         var Data6 = null;         var Data7 = null;         var Data8 = null;         var Data9 = null;         var Data10 = null;         var txtHTML = "";          console.log("before enum");         var listEnumerator = allItems.getEnumerator();         console.log("get enumerator");             while (listEnumerator.moveNext()) {                     console.log("before got current");                     var currentItem = listEnumerator.get_current();                     console.log("got current");                     Data1 = currentItem.get_item('Data1');                     Data2 = currentItem.get_item('Data2');                     Data3 = currentItem.get_item('Data3');                     Data4 = currentItem.get_item('Data4');                     Data5 = currentItem.get_item('Data5');                     Data6 = currentItem.get_item('Data6');                     Data7 = currentItem.get_item('Data7');                     Data8 = currentItem.get_item('Data8');                     Data9 = currentItem.get_item('Data9');                     Data10 = currentItem.get_item('Data10');                     var row = document.createElement("tr");                      txtHTML = txtHTML + "<tr>";                     txtHTML = txtHTML + "<td>";                     if (Data1 != null) {                         txtHTML = txtHTML + "<p>" + Data1 + "</p>";                     }                     txtHTML = txtHTML + "</td>";                      txtHTML = txtHTML + "<td>";                     if (Data2 != null) {                         txtHTML = txtHTML + "<p>" + Data2 + "</p>";                     }                     txtHTML = txtHTML + "</td>";                      txtHTML = txtHTML + "<td>";                     if (Data3 != null) {                         txtHTML = txtHTML + "<p>" + Data3 + "</p>";                     }                     txtHTML = txtHTML + "</td>";                      txtHTML = txtHTML + "<td>";                     if (Data4 != null) {                         txtHTML = txtHTML + "<p>" + Data4 + "</p>";                     }                     txtHTML = txtHTML + "</td>";                                                      txtHTML = txtHTML + "<td>";                     if (Data5 != null) {                         txtHTML = txtHTML + "<p>" + Data5 + "</p>";                     }                     txtHTML = txtHTML + "<td>";                     if (Data6 != null) {                         txtHTML = txtHTML + "<p>" + Data6 + "</p>";                     }                     txtHTML = txtHTML + "</td>";                         txtHTML = txtHTML + "<td>";                     if (Data7 != null) {                         txtHTML = txtHTML + "<p>" + Data7 + "</p>";                     }                     txtHTML = txtHTML + "</td>";                         txtHTML = txtHTML + "<td>";                     if (Data8 != null) {                         txtHTML = txtHTML + "<p>" + Data8 + "</p>";                     }                     txtHTML = txtHTML + "</td>";                         txtHTML = txtHTML + "<td>";                     if (Data9 != null) {                         txtHTML = txtHTML + "<p>" + Data9 + "</p>";                     }                     txtHTML = txtHTML + "</td>";                         txtHTML = txtHTML + "<td>";                     if (Data10 != null) {                         txtHTML = txtHTML + "<p>" + Data10 + "</p>";                     }                     txtHTML = txtHTML + "</td>";                         txtHTML = txtHTML + "</tr>";             }             console.log("ran");         $  ("#tblCustomListData").append(txtHTML);     }      function onQueryFailed(sender, args)      {         alert("failed Message" + args.get_message());     }      function get_isListExists(listTitle, counter, OnSuccess, OnError){          var ctx = SP.ClientContext.get_current();         var web = ctx.get_web();         var lists = web.get_lists();         ctx.load(lists);          var outValue = $  .Deferred();         ctx.executeQueryAsync(           function() {           if (counter <= valStopped){             var listExists = false;               var le = lists.getEnumerator();             while (le.moveNext()) {                     var list = le.get_current();                     if(list.get_title() == listTitle) {                         listExists = true;                         break;                     }                 }                 }            outValue.resolve();           OnSuccess(listExists,counter);           OnError();             });         return outValue.promise();     }  </script>        <p> Data6: <select id="Data6">       <option value="Op1">Op1</option>       <option value="Op2">Op2</option>       <option value="Op3">Op3</option>       <option value="Op4">Op4</option>       <option value="Op5">Op5</option>       <option value="Op6">Op6</option>     </select> </p>     <p>Start Date: <input type="text" id="datepickerStart">     End Date: <input type="text" id="datepickerEnd"></p>     <center><button ID="retrieveList" onclick="ExecuteOrDelayUntilScriptLoaded(getListData(), 'sp.js');return false">Retrieve List</button></center></br>     <table id="tblCustomListData" border="1">         <thead>             <tr>                 <th>Data1                 </th>                 <th>Data2                 </th>                 <th>Data3                 </th>                 <th>Data4                 </th>                 <th>Data5                 </th>                 <th>Data6                 </th>                 <th>Data7                 </th>                 <th>Data8                 </th>                 <th>Data9                 </th>                 <th>Data10                 </th>                                    </tr>         </thead>     </table> 

Как работает @Async в Spring

Хочу понять что происходит внутри анотации @Async. В частности использует ли Spring пул потоков? Как его можно конфигурировать?

И что является лучшей практикой для асинхронных вызовов: @Async или вручную запускать на своем пуле потоков.

How do the (presumably sync) loop runners launch the async event loop?

Where is the implementation interface in Python documented that allows the async loop runners (from trio, asyncio, curio) to start the whole shebang?

We know that sync functions cannot call async ones and yet the async implementations have a magic function that starts the whole event loop, e.g.:

trio.run(some...async...fun)...  docstring: except that :func:`run` can (and must) be called from a synchronous context. 

Googling ‘python start an async event loop’ refers to asyncio documentation, which is a specific implementation.

Are the asyncio/trio/curio loop runners all hand-crafted to breach the sync->async wall?

Nuxt auth getToken witnin async is undefined

I am trying to fetch some data from user and I need to pass bearer token within call.

async asyncData () {     let response = await axios.get('dataURL', {}, { headers: {"Authorization" : `Bearer $  {this.$  auth.getToken('local')}`} })   }, 

But this doesn’t work, it always says that $ auth is undefined, while within template I can easily output any $ auth property…

How can I get bearer token within async?

Многопоточность. Проблемы с пониманием mutex, lock_guard и async

Осваиваю многопоточность, но что-то, видимо, я понимаю не так. Далее на примере кода опишу, как я понимаю, он должен работать, а вы укажите, мне, пожалуйста, что я не учел, ибо, исходя из моей логики, все должно работать. В коде две проблемы: синхронизация и передача функции в асинк.

1.Мне нужно создать словарь, разделенный на несколько частей для того, чтоб иметь возможность одновременно получать доступ к разным диапазонам, но не получать одновременного доступа к одному, я выбираю в качестве полей класса вектор словарей и вектор мьютексов. Так же я добавляю в поля класса две переменные, в которых будет храниться размер, на который делится словарь, и размер одной части словаря. Чтоб иметь к ним доступ в любом месте кода.

У меня есть вспомогательная функция, которая переводит из знакового числа в беззнаковое.

В конструкторе я инициализирую оба вектора, присваиваю значение размеру и вычисляю размер одной секции.

В операторе квадратных скобок я вычисляю, к какой секции относится ключ, и возвращаю ссылку на значение этого ключа через вектор(секция)(ключ) и лок_гард мьютекса из соответствующей секции вектора мьютексов, чтоб залочить секцию для изменения другим потоком.

И вот здесь возникает проблема. Судя по результатам теста, секция не лочится.


2.Далее, для построения общего словаря у меня есть вспомогательная функция, которая на вход получает по ссылкам мьютекс, словарь, по которому будет обновляться словарь результата, и словарь, который будет обновляться.

Лочу лок_гардом секцию, и далее прохожусь по значениям словаря источника и записываю их в словарь результат. В самой функции построения словаря я циклом по размеру вектора словарей запускаю асинк от вспомогательной функции в вектор войдовых фьючеров. Потом циклом по фьючерному словарю получаю результаты.

И тут возникает вторая проблема: компилятор не принимает функцию в асинк. Выдает сбой при специализации функции-шаблона, хотя все аргументы, вроде, соответствуют…

Объясните, пожалуйста, где моя логика дает сбой, не предлагая мне “правильных” решений с другими полями, методами и т.п.

Собственно, код:

#include "test_runner.h" #include "profile.h"  #include <algorithm> #include <future> #include <limits> #include <numeric> #include <vector> #include <string> #include <random> using namespace std;  template <typename T> size_t Unsign(T position) {     size_t pos = position - numeric_limits<T>::min();     return pos; }  template <typename K, typename V> void UpdateMap(mutex& mut, map<K, V>& maps, map<K, V>& result) {     lock_guard<mutex> l(mut);     result.insert(maps.begin(), maps.end()); }  template <typename K, typename V> class ConcurrentMap { public:   static_assert(is_integral_v<K>, "ConcurrentMap supports only integer keys");    struct Access {     V& ref_to_value;     lock_guard<mutex> l;   };    explicit ConcurrentMap(size_t bucket_count) : size_(bucket_count), mutexs(bucket_count), maps(bucket_count) {       size_of_one = Unsign(numeric_limits<K>::max()) / size_;   }    Access operator[](const K& key) {       size_t position = Unsign(key) / size_of_one;       return { maps[position][key], lock_guard(mutexs[position]) };   }    map<K, V> BuildOrdinaryMap() {       map<K, V> result;        vector<future<void>> f;       for (size_t i = 0; i < maps.size(); i++) {           f.push_back(async(UpdateMap, ref(mutexs[i]), ref(maps[i]), ref(result)));           //lock_guard<mutex> l(mutexs[i]);           //result.insert(maps[i].begin(), maps[i].end());       }       for (auto& i : f) {           i.get();       }        return result;   }  private:     size_t size_ = 1;     size_t size_of_one;     vector<mutex> mutexs;     vector<map<K, V>> maps; };  void RunConcurrentUpdates(     ConcurrentMap<int, int>& cm, size_t thread_count, int key_count ) {   auto kernel = [&cm, key_count](int seed) {     vector<int> updates(key_count);     iota(begin(updates), end(updates), -key_count / 2);     shuffle(begin(updates), end(updates), default_random_engine(seed));      for (int i = 0; i < 2; ++i) {       for (auto key : updates) {         cm[key].ref_to_value++;       }     }   };    vector<future<void>> futures;   for (size_t i = 0; i < thread_count; ++i) {     futures.push_back(async(kernel, i));   } }  void TestConcurrentUpdate() {   const size_t thread_count = 3;   const size_t key_count = 50000;    ConcurrentMap<int, int> cm(thread_count);   RunConcurrentUpdates(cm, thread_count, key_count);    const auto result = cm.BuildOrdinaryMap();   ASSERT_EQUAL(result.size(), key_count);   for (auto& [k, v] : result) {     AssertEqual(v, 6, "Key = " + to_string(k));   } }  void TestReadAndWrite() {   ConcurrentMap<size_t, string> cm(5);    auto updater = [&cm] {     for (size_t i = 0; i < 50000; ++i) {       cm[i].ref_to_value += 'a';     }   };   auto reader = [&cm] {     vector<string> result(50000);     for (size_t i = 0; i < result.size(); ++i) {       result[i] = cm[i].ref_to_value;     }     return result;   };    auto u1 = async(updater);   auto r1 = async(reader);   auto u2 = async(updater);   auto r2 = async(reader);    u1.get();   u2.get();    for (auto f : {&r1, &r2}) {     auto result = f->get();     ASSERT(all_of(result.begin(), result.end(), [](const string& s) {       return s.empty() || s == "a" || s == "aa";     }));   } }  void TestSpeedup() {   {     ConcurrentMap<int, int> single_lock(1);      LOG_DURATION("Single lock");     RunConcurrentUpdates(single_lock, 4, 50000);   }   {     ConcurrentMap<int, int> many_locks(100);      LOG_DURATION("100 locks");     RunConcurrentUpdates(many_locks, 4, 50000);   } }  int main() {   TestRunner tr;   RUN_TEST(tr, TestConcurrentUpdate);   RUN_TEST(tr, TestReadAndWrite);   RUN_TEST(tr, TestSpeedup); } 

Break from async function in await call

Okay, so I’m working with data from Memcache using a promise based library but the issue I’m having is I don’t know a way to break from the async call if a result is found?

The code I’m working with is:

        const _pong = function() {             return socket.emit('aye', {                 pong: globals.uuid()             });         };         return socket.on('helo', async function(data) {             socket._uuid = data.uuid;             let key = 'ws-ping:' + data.uuid;             await cache.get(key).then((result) => {                 if(result !== undefined) {                     _pong();                 }             });             ......         }); 

I basically need to just ignore the rest of the socket.on function if a result is found using the given key? but it seems to continue?

Como llamar el metodo async task en ajax en jquery utilizando Web forms?

Tengo una aplicacion en web forms y estoy utilizando metodos async en el codebehind que luego llamo con ajax en jquery. Realize una prueba con mvc y me funciona pero, al cambiar a un proyecto web forms no me genera el tokens de acceso al cognitive services de azure y me devuelve la pagina aspx donde esta el metodo que llamo. El codigo del codebehind.

        public async Task<string> Token()     {         return await GetTokenAsync(Region, SubscriptionKey);     }     private async Task<string> GetTokenAsync(string region, string subscriptionKey)     {         if (string.IsNullOrEmpty(region) || string.IsNullOrEmpty(subscriptionKey))         {             throw new ArgumentNullException("Region or subscriptionKey is null!");         }          using (var client = new HttpClient())         {             client.DefaultRequestHeaders.Add("Ocp-Apim-Subscription-Key", subscriptionKey);             using (var response = await client.PostAsync($  "https://{region}.api.cognitive.microsoft.com/sts/v1.0/issueToken", null))             {                 return await response.Content.ReadAsStringAsync();             }         }     } 

Con este codigo luego lo llamo en la pagina aspx con ajax y jquery, pero no funciona.Este metodo lo llamo desde un button con onclick. En Url: llamo a la funcion Token que es async y esta en la misma pagina(Codebehind).

<script type='text/javascript'>     function getImmersiveReaderTokenAsync() {         return new Promise((resolve, reject) => {             $  .ajax({                 url: 'AAreader.aspx/Token',                 type: 'GET',                 success: token => {                     resolve(token);                 },                 error: err => {                     console.log('Error in getting token!', err);                     reject(err);                 }             });         });     }      async function handleLaunchImmersiveReader() {         const data = {             title: document.getElementById('title').innerText,             chunks: [{                 content: document.getElementById('content').innerText,                 lang: 'en'             }]         };         var tiltes = document.getElementById('title').innerText;         console.log(tiltes);         const options = {             uiZIndex: 1000000         }          const token = await getImmersiveReaderTokenAsync();         console.log(token);         ImmersiveReader.launchAsync(token, data, options)             .then(() => {                 console.log('success');             }, (error) => {                 console.log('error! ' + error);             });     } </script> 

El error es que me devuelve no un token sino mas bien la pagina aspx en html y en consola el error es: TypeError: e.xhr is undefined

async со стрелочной функцией не работает

Что происходит. Не пойму.

Есть метод жизненного цикла react native

componentDidMount(). 

И есть такой код:

class EnterAdditionalData extends Component<Props> {     constructor(props) {         super(props);         this.state = {             isLoadInfo: false,         }     }      func = async () => {         for (let i = 0; i < 100000000; i++) {             console.log(i);         }         this.setState({isLoadtInfo: true});     }      componentDidMount() {         this.func();     }      render() {         return <View><Text>Hello</Text></View>     }  } 

Итог: async не работает, т.к. выполняется цикл for (let i = 0; i < 100000000; i++) и соответственно все зависает пока работает цикл. На компоненте зависают все элементы управления. И где тут работа async если программа ждет выполнение метода помеченного async, а не продолжает параллельно выполняться?

А вот если вместо цикла мы указываем

setTimeout(() => {             this.setState({isLoadInfo: true}); }, 9000); 

тогда все работает как надо:

class EnterAdditionalData extends Component<Props> {     constructor(props) {         super(props);         this.state = {             isLoadInfo: false,         }     }      func = async () => {         setTimeout(() => {             this.setState({isLoadInfo: true});         }, 9000);     }      componentDidMount() {         this.func();     }      render() {         return <View><Text>Hello</Text></View>     }  } 

Здесь async работает как нужно. И программа не останавливается на методе setTimeout() и по прошествии 9 сек компонент рендерится

Что я делаю не так? Заранее спасибо.