首页 > 解决方案 > 变量输出到控制台后返回函数的值

问题描述

在循环中,我调用该函数并将标识符传递给它,之后该函数应将空缺返回给我。

const Profile = require('upwork-api/lib/routers/jobs/profile.js').Profile;
...
let jobsDetails = [];
for (let valueKeys of Object.values(arrayOfJobs)) {
    getJobDitalis(api, valueKeys, (error, data) => {
        console.log(data.profile)
        jobsDetails.push(`${data.profile}`);
    });
    console.log(jobsDetails)
}
...
function getJobDitalis(api, key, callback) {
    const profile = new Profile(api);
    profile.getSpecific(key, (error, data) => {
        callback(error, data);
    });
}

但是由于某种原因,首先在控制台中显示一个空对象,然后只显示有关空缺的信息。也就是console.log (jobsDetails)先被解雇,然后才console.log (data.profile)

[]
[]
[]
{job}
{job}
{job}

为什么会发生?我的错误是什么?

标签: javascript

解决方案


使用 async await 你可以使你的异步任务同步。

我不知道您的代码结构,但我试图根据给定的数据提出解决方案。

function getJobDitalis(api, key, callback) {
    const profile = new Profile(api);
    profile.getSpecific(key, (error, data) => {
        callback(error, data);
    });
}
...
(async ()=> {
let jobDetails = [];
for (let valueKeys of Object.values(arrayOfJobs)) {
const profile = await new Promise(resolve=>{
    getJobDitalis(api, valueKeys, (error, data) => {
        console.log(data.profile)
        resolve(data.profile);
    });
  })
 jobDetails.push(profile)
}
 console.log(jobDetails); 
 //do your task with jobDetails
})()

我做了IIFE异步功能。


推荐阅读