w3schools then sincronas promises promesas node leer funciones desde cero archivos anidadas javascript node.js promise q formidable

then - promesas javascript



promesa con lectura de bucle y archivo en nodejs (2)

He actualizado el código con Q.todo lo mencionado p.then se ejecutará una sola vez.

http://runnable.com/VI1efZDJvlQ75mlW/api-promise-loop-for-node-js-and-hello-world

form.parse(req, function(err, fields, files) { var p = Q(); Object.keys(files).forEach(function (key) { promises.push(p.then(function () { // chain the next one return Q.nfcall(fs.readFile, files[key].path, "binary"). // readfile then(function (content) { // process content and save file = {}; file.filename = files[key].name; file.path = files[key].path; file.content_type = files[key].type; file.size = files[key].size; console.log(files[key].name); file.content = binaryToBase64(content); filesarr.push(file); // Q.npost(art.save, art); // wait for save, update as needed }) })); Q.all(promises); }); });

la pregunta es cómo usar q.npost si tengo archivos de modelo de mangosta y quiero guardar ...?

Miré mucho ejemplo pero no pude lograrlo ... así que necesito ayuda ...

Problema..

  1. el contenido del ciclo se debe pasar para ejecutar uno por uno.
  2. cada iteración de bucle contiene una operación de lectura de archivo y de almacenamiento de base de datos junto con algunas otras propiedades de objetos que deben asignarse.

He creado el ejemplo aquí ..

http://runnable.com/VI1efZDJvlQ75mlW/api-promise-loop-for-node-js-and-hello-world

como correr:

Api: http://web-91b5a8f5-67af-4ffd-9a32-54a50b10fce3.runnable.com/api/upload

método: POST

content-type: multipart / form-data

carga más de un archivo con nombre.

..

la promesa final esperada es

files.name = "name of file" files.content files.content-type files.size

- guardado en db.

actualmente obtengo un contenido diferente del archivo ... pero el contenido de otros archivos no está completo y no está definido.

Saludos, Moyeen


La técnica que estás buscando es un encadenamiento imposible

var p= Q(); Object.keys(files).forEach(function(key){ p = p.then(function(){ // chain the next one return Q.nfcall(fs.readFile, files[key].path, "binary", i). // readfile then(function (content) { // process content and save files.filename = files[key].name; files.path = files[key].path; files.content_type = files[key].type; files.size = files[key].size; console.log(files.filename); files.content = binaryToBase64(content); return Q.npost(art.save, art); // wait for save, update as needed })); }); });

Básicamente, le decimos a cada operación que suceda después de que la anterior haya terminado encadenándolas y return , lo que causa una espera en el valor asincrónico.

Como un subproducto que luego puede usar

p.then(function(last){ // all done, access last here });

El controlador se ejecutará cuando se cumplan todas las promesas.