node.js callback -> promises

0

Witam,
w node.js korzystam z następującej biblioteki (nodes7):
Aktualnie skupiam się jedynie na odczycie danych "readAllItems".

Pytanie brzmi, czy da się przekształcić poniższy kod na funkcję typu promises tak aby po wywołaniu (async await) zwróciła mi otrzymane dane tj. values z valuesReady?
Założenia:
do funkcji **initiateConnection **muszę przekazać parametr adr = '192.168.0.5',
do funkcji connected chcę przekazać parametr variables = {// adresy zmiennych do odczytu}
i na koniec z funkcji valuesReady zwrócić otrzymane dane

var nodes7 = require('nodes7');  
var conn = new nodes7;
var doneReading = false;
var doneWriting = false;

var variables = { 
		  TEST5: 'DB1,REAL4',
};

conn.initiateConnection({port: 102, host: '192.168.0.2', rack: 0, slot: 1}, connected);

function connected(err) {
	if (typeof(err) !== "undefined") {
		// We have an error.  Maybe the PLC is not reachable.
		console.log(err);
		process.exit();
	}
	conn.setTranslationCB(function(tag) {return variables[tag];}); 
	conn.addItems(['TEST5']);
	conn.readAllItems(valuesReady);
}

function valuesReady(anythingBad, values) {
	if (anythingBad) { console.log("SOMETHING WENT WRONG READING VALUES!!!!"); }
	console.log(values);   // <------------ TUTAJ OTRZYMUJĘ ODCZYTANE DANE
	doneReading = true;
	if (doneWriting) { process.exit(); }
}
1

Tak, Promise oraz kontynuacje są jednoznaczne:

function connected(err) {
  /* ... */

  return new Promise((resolve) => {
    conn.addAllItems(resolve);
  });
}
0

Próbuję w ten sposób (jednak z marnym efektem):

var nodes7 = require('nodes7');  
var conn = new nodes7;
var dataToRead = { 
          TEST5: 'DB12,REAL140',
};
var adr = '172.16.85.10';

function readVal(adr, variables){
    conn.setTranslationCB(function(tag) {return variables[tag];}); 
    conn.addItemsNow(['TEST5']);

    return new Promise((resolve) => {
         conn.initiateConnection({port: 102, host: adr, rack: 0, slot: 1}, resolve);
    })    
}
function connected() {
    return new Promise((resolve) => {
        conn.readAllItems(resolve);
      });
}
async function testAsync(adr,dataToRead){

    const intConn = await readVal(adr,dataToRead);
    console.log(intConn);

    const readAll = await connected(intConn);
    console.log(readAll);
}
testAsync(adr,dataToRead);

W odpowiedzi otrzymuję:
undefined
false <- jeśli dobrze rozumiem tu powinna być oczekiwana wartość

natomiast powinienem otrzymać:
{ TEST5: 23.5625 }

0

Prościej już nie potrafię a i tak nic z tego:

var nodes7 = require('nodes7');  
var conn = new nodes7;

function readVal(){
    return new Promise((resolve) => {
         conn.initiateConnection({port: 102, host: '172.16.85.10', rack: 0, slot: 1}, resolve);
    })    
}
function connected() {
    conn.addItemsNow(['DB12,REAL140']);

    return new Promise((resolve) => {
        conn.readAllItems(resolve);
      });
}
async function testAsync(dataToRead){
    try {
        await readVal();

        const readAll = await connected();
        console.log(readAll);
    }catch(e){
        console.log(e);
    }

}
testAsync();

readAll = false // powinno być teraz {'DB12,REAL140': 23:45}

1 użytkowników online, w tym zalogowanych: 0, gości: 1