在循环中,我调用该函数并将标识符传递给它,之后该函数应将空缺返回给我。
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}为什么会发生这种情况?我的错误是什么?
发布于 2019-06-13 20:06:40
使用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实现了异步功能。
发布于 2019-06-13 17:38:52
流(让我们假设for循环的一次迭代):
getJobDetalis(api, key, callback)
profile.getSpecific(key, func)
func(error, data)
callback(error, data)
console.log(data.profile)
console.log(jobsDetails)但是,profile.getSpecific不一定要等待func完成。
由于第一次打印是从func的调用堆栈执行的,因此它不一定会在第二次打印之前发生。
https://stackoverflow.com/questions/56577396
复制相似问题