Estoy creando una API de descanso. Mi método get devolverá el resultado según el valor total del suministro del contrato o no responderá, pero la solicitud que hice al contrato devuelve una promesa. ¿Cómo puedo usar este valor?
const NameContract = new web3.eth.Contract(abi, '0xE3A2beCa..........1D901F8'); NameContract.methods.totalSupply().call().then(value => console.log(value)) app.get('/:id', (req, res) => { let id = parseInt(req.params.id); //I want to use an if here. //I want to throw the query according to the value returned from above, // but it returns a promise, how can I use it value? nft.findOne({ id: id }, (err, doc) => { if (doc != null) { res.json(doc) } else { res.status(404).json(err) } }); });Intenta guardar la promesa cuyo valor terminará siendo el valor total
const pTotalSupply = NameContract.methods.totalSupply().call(); (suponiendo que esto sea válido, el método .call parece un poco extraño). Las opciones entonces son
pTotalSupply anterior se haya cumplido, siempre que el suministro total sea un valor estático y solo haya un contrato de nombre con el que el servidor tenga que lidiar,app.get , ya sea usando un operador de await dentro del cuerpo de una función asíncrona, o envolviendo el procesamiento de la solicitud en una función de promesa then argumento, othen llame para guardar el valor del suministro y llame a next en un controlador app.get de dos partes. Esta es más una solución orientada a la expresión que utiliza un patrón similar a: app.get('/:id', (req, res, next) => { pTotalSupply.then( value => { res.locals.value = value; next(); } .catch( err => res.status(500).send("server error")); // or whatever } , (req, res) => { const value = res.locals.value; let id = parseInt(req.params.id); // process request with value and id: ... });La segunda opción está cubierta en las respuestas a Cómo devolver la respuesta de una llamada asíncrona