Я пытаюсь сделать что-то вроде этого, я получаю информацию в массив объектов, затем я использую функцию async.each, чтобы вызвать две функции, которые отправляют данные в другой api, я использую ExpressJs. Вот код:От async.each отправьте на две функции differents
Асинхронный функция:
async.each(readingsArray, function(reading, callback) {
var firstTwo;
firstTwo = reading.value.substring(0,2);
if(firstTwo === '32') {
updateLocation(reading, function() {
callback();
});
} else {
updateItem(reading, function() {
callback();
});
}
}, function(err) {
if(err) {
res.send(Boom.badRequest('Can't sent data'));
} else {
res.send({
statusCode: 200,
message: 'Data sent'
});
}
});
А остальные две функции:
var updateLocation = function updateLocation (reading, callback) {
request.patch(config.url + '/handhelds/' + reading.id)
.send({
//some information
})
.end(function(err, res) {
if (err) {
callback(err);
} else {
callback();
}
});
};
var updateItem = function updateItem(lectura, callback) {
request.post(config.url + '/items/' + reading.id + '/event')
.send({
//some information
})
.end(function(err, res) {
if (err) {
callback(err);
} else {
callback();
}
});
};
Я все еще пытаюсь понять асинхронную часть nodejs. То, что я пытаюсь сделать, - это обновить местоположение устройства, после этого отправьте элементы с другой функцией updateItem до тех пор, пока не будет вызвано другое updateLocation, а затем продолжите отправку элементов. Вот почему в Async я помещаю if, если он идентифицируется из местоположения или элемента. Является ли это возможным?
EDIT1:
Вот весь код, который я использую:
'use strict';
var express = require('express');
var bodyParser = require('body-parser');
var request = require('superagent');
var async = require('async');
var moment = require('moment-timezone');
var Boom = require('boom');
var config = require('./config.js');
var app = express();
var getReadings = function getReadings(csvValue, mac) {
//Here I return the array of objects
var readings, values;
var arrayFromCSV = function arrayFromCSV(csv) {
var array = values.replace(/\n/g, ',').replace(/\'/g, '').replace(/\"/g, '').split(',');
array.pop();
return array;
};
var epochToISO = function epochToISO(epochValue) {
var epochInMilliseconds = parseInt(epochValue, 10)/1000;
var date = new Date(epochInMilliseconds);
return date.toISOString();
};
var convertToArgentinaTimezone = function convertToArgTimezone(utcTime) {
return moment.tz(utcTime, 'America/Argentina/Buenos_Aires').format();
};
var separateValues = function separateValues(readings) {
var items = [];
for (var i = 0; i < lecturas.length; i += 4) {
var newObject = {
epc: lecturas[i + 1],
mac: mac,
timeStamp: convertToArgentinaTimezone(epochToISO(lecturas[i + 2]))
};
items.push(newObject);
}
return items;
};
lecturas = arrayFromCSV(valorCSV);
epcs = separarPorEPC(lecturas);
return epcs;
};
var updateLocation = function updateLocation (reading, callback) {
request.patch(config.url + '/handhelds/' + reading.id)
.send({
//some information
})
.end(function(err, res) {
if (err) {
callback(err);
} else {
callback();
}
});
};
var updateItem = function updateItem(lectura, callback) {
request.post(config.url + '/items/' + reading.id + '/event')
.send({
//some information
})
.end(function(err, res) {
if (err) {
callback(err);
} else {
callback();
}
});
};
app.use(bodyParser.urlencoded({
extended: true
}));
app.post('/', function(req, res) {
var readingsInValues = req.body.field_values;
var mac = req.body.reader_name.replace(/\'/g, '').replace(/\"/g, '');
var readingArrays = getReadings(readingsInValues, mac);
async.each(readingsArrays, function(reading, callback) {
var firstTwo;
firstTwo = reading.value.substring(0,2);
if(firstTwo === '32') {
updateLocation(reading, function() {
callback();
});
} else {
updateItem(reading, function() {
callback();
});
}
}, function(err) {
if(err) {
res.send(Boom.badRequest('Can't sent data'));
} else {
res.send({
statusCode: 200,
message: 'Data sent'
});
}
});
});
console.log('Traductor encendido');
app.listen(config.port);
массива выглядит следующим образом:
[ { id: '32144B5A1231200000001',
mac: '00:16:25:10:57:E9',
timeStamp: '2015-11-20T10:28:26-03:00' },
{ id: '30142F13F44123F0000057',
mac: '00:16:25:10:57:E9',
timeStamp: '2015-11-20T10:28:28-03:00' },
{ id: '32144B1231230000001AB',
mac: '00:16:25:10:57:E9',
timeStamp: '2015-11-20T10:29:09-03:00' },
{ id: '30142F13F0234234000055',
mac: '00:16:25:10:57:E9',
timeStamp: '2015-11-20T10:30:19-03:00' } ]
Надеется, что это прояснить мой вопрос.
Привет Джефф, спасибо за ваш ответ, вы правы со структурой readingArray это что-то вроде этого, на мой вопрос, как я могу разделить массив в суб массивы, как вы пост? – Fernando