Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

118
Views
Llamada del servidor de JavaScript - Esperar la promesa

Estoy escribiendo una llamada de servidor para completar un mapa. Parece que no puedo obtener el código correcto en cuanto a dónde esperará hasta que finalice la llamada del servidor antes de continuar. Escribí la siguiente función DoIt que llama a someTimeConsumingthing que llama al servidor y llena el mapa. Hará la llamada del servidor en SomeTimeConsumingThing, sin embargo, luego saltará de la función e irá al siguiente bloque de código.

 export function onBeforePriceRules(quote, lineModels, conn) { var varQuoteHostid; if (lineModels.length) { var varProdIds = []; //Might want to do a function here. lineModels.forEach(function (line) { varQuoteHostid = quote.record["Host__c"]; var varProdId = line.record["SBQQ__Product__c"]; if (varProdId) { varProdIds.push(varProdId); } }); } const UniqueProdList = [...new Set(varProdIds)]; var ProdIdList = "('" + UniqueProdList.join("', '") + "')"; let myMap; var ProductMap = new Map(); //Call DoIt doit(conn, ProdIdList, ProductMap).then(function () { console.log("Now finally done!"); debugger; }); var NewVarable = "NewThing"; console.log("NewVarable" + NewVarable); debugger; return Promise.resolve(); } function someTimeConsumingThing(conn, ProdIdList, ProductMap) { console.log("someTimeConsumingThing"); debugger; conn .query("SELECT Id, Model__c FROM Product2 WHERE ID IN" + ProdIdList) .then(async function (returnedRecords) { if (returnedRecords.totalSize) { returnedRecords.records.forEach(function (record) { ProductMap.set(record.Id, record); console.log("ProductMap" + ProductMap); debugger; }); } }); return ProductMap; } async function doit(conn, ProdIdList, ProductMap) { console.log("Calling someTimeConsumingThing"); debugger; await someTimeConsumingThing(conn, ProdIdList, ProductMap); console.log("Ready with someTimeConsumingThing"); debugger; }
about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

Estás creando una promesa cuando usas

 conn .query("SELECT Id, Model__c FROM Product2 WHERE ID IN" + ProdIdList)

y extiende esa promesa llamando then lo que literalmente significa hacer algo después de que la promesa se haya resuelto. El problema es que no está esperando esa promesa en ningún lado, sino que crea una nueva justo después de eso, que regresa y await en la función doit .

 return new Promise(function (resolve, reject) { setTimeout(resolve, 2000); });

Lo que quiere es esperar la promesa de consulta real, así que edite su someTimeConsumingThing para devolver la promesa de consulta, así

 function someTimeConsumingThing(conn, ProdIdList, ProductMap) { console.log("someTimeConsumingThing"); debugger; // Imagine this as a block, that executes some time somewhere. // Everything outside of it gets executed when you call this function return conn .query("SELECT Id, Model__c FROM Product2 WHERE ID IN" + ProdIdList) .then(async function (returnedRecords) { if (returnedRecords.totalSize) { returnedRecords.records.forEach(function (record) { ProductMap.set(record.Id, record); console.log("ProductMap" + ProductMap); debugger; }); } }); }

Lo mismo con la sintaxis async/await

 async function someTimeConsumingThing(conn, ProdIdList, ProductMap) { console.log("someTimeConsumingThing"); debugger; // Await for the query results const returnedRecords = await conn .query("SELECT Id, Model__c FROM Product2 WHERE ID IN" + ProdIdList) if (returnedRecords.totalSize) { returnedRecords.records.forEach(function (record) { ProductMap.set(record.Id, record); console.log("ProductMap" + ProductMap); debugger; }); } return whateveryouwant }

¡Lea más sobre las promesas aquí y no tenga miedo de buscar en Google cómo funcionan y/o la explicación de ellas!

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!