首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用回调循环函数并等待结果

使用回调循环函数并等待结果
EN

Stack Overflow用户
提问于 2020-12-22 20:26:29
回答 1查看 26关注 0票数 0

我理解等待、异步和承诺的基本概念。我试了很多,但没能得到预期的结果。出于这个原因,我请求你们的帮助。提前进行Thx检查。

我踢掉了所有不必要的代码行,你可以很快看到我想要做的事情。

代码语言:javascript
复制
app.post('/create',  (req,res) => {

  var dataArray = [] 

  req.body.array.forEach((ele) => {

  let blobAdress = ele.link.split('/')[0];
  let extracted = ele.extracted
  let blob = `${blobAdress}/extracted-${extracted}.json`;
  const container =  'test';

  //SHOULD BE EXECUTED FOR EACH ELEMENT OF FOR LOOP  
 
  api.getTextFromBlob(container, blob,  (response, error) => {
   if (error){console.log("Error",error)}
     let jsonResponse = JSON.parse(response);
     console.log(jsonResponse)
     dataArray.push(jsonResponse) // I WANT ALL DATA FROM THE CB IN ONE ARRAY BUNDLED
     })
  })

// RUN THIS PART AFTER FOR LOOP HAS BEEN EXECUTED PROPER

console.log(dataArray) // !ASYNC JS --> DATA ARRAY IS EMPTY BECAUSE datArray IS CONSOLE.LOG BEFORE api.getText EXECTUED
})    
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-22 20:38:05

首先需要将回调函数封装到Promise对象中:

代码语言:javascript
复制
var getTextFromBlobAsPromise = (container, blob) => new Promise((resolve, reject) => {
    api.getTextFromBlob(container, blob, (response, error) => {
        if (error) {
            console.log("Error", error)
            return reject(error); // depends on business
        }
        let jsonResponse = JSON.parse(response);
        console.log(jsonResponse)
        resolve(jsonResponse);
    })
})

然后,您可以等待使用Promise.all函数解析所有的promises:

代码语言:javascript
复制
app.post('/create', (req, res) => {

    var promises = [];
    req.body.array.forEach((ele) => {
        let blobAdress = ele.link.split('/')[0];
        let extracted = ele.extracted
        let blob = `${blobAdress}/extracted-${extracted}.json`;
        const container = 'test';

        //SHOULD BE EXECUTED FOR EACH ELEMENT OF FOR LOOP
        promises.push(getTextFromBlobAsPromise(container, blob))   ;
    })

    // RUN THIS PART AFTER FOR LOOP HAS BEEN EXECUTED PROPER
    Promise.all(promises).then(dataArray => {
        console.log(dataArray) // !ASYNC JS --> DATA ARRAY IS EMPTY BECAUSE datArray IS CONSOLE.LOG BEFORE api.getText EXECTUED
    })
})
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65408735

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档