javascript - 变量输出到控制台后返回函数的值
问题描述
在循环中,我调用该函数并将标识符传递给它,之后该函数应将空缺返回给我。
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}
为什么会发生?我的错误是什么?
解决方案
使用 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异步功能。
推荐阅读
- python - 如何重新组织这些数据?
- javascript - 为什么我的 javascript 页面无法链接到我的 HTML 页面?
- mongodb - 通过 localhost 连接到容器:Docker vs Kubernetes
- go - 从函数中同时返回值和错误是惯例吗
- sql - teiid sql 只加入一行
- azure - Azure VM GPU 加速映像
- php - 如何跟踪来自 php echo 表单的响应
- javascript - 在数组的映射中运行 setInterval 函数
- javascript - 定时器运行太快
- firebase - 构建方法中的 FutureBuilder,无限循环