我想从JIRA获得一系列键。当前函数正在运行,但是当我在程序末尾调用变量pendingIssues时,它为空,因为该请求尚未由函数get_all_issues处理。
如何更改功能以等待来自功能的请求,然后再请求未决问题。
代码:
var pendingIssues = [];
function get_all_issues() {
console.log("Getting all JIRA issues...");
var TotalIssues = 1000;
var count_issue;
var flag_no_more_issue = 0;
for (count_issue = 0; count_issue < TotalIssues; count_issue+=50){
console.log(count_issue);
//envoi de la requête
jira.searchJira(searchString = 'project= PITM',
optional ={
startAt:count_issue,
maxResults:50,
fields:["key"],
}).then(function(issues) {
//Ensemble des tickets à traiter
console.log('--------------------------- ');
console.log(Date.now());
var pas;
for (pas = 0; pas < 50 && flag_no_more_issue != 1 ; pas++){
if (issues.issues[0] != null){
pendingIssues.push(issues.issues.pop().key)
console.log(pendingIssues.length)
//console.log(pas);
}
else{
var flag_no_more_issue = 1;
console.log('no more issue !')
}
}
})
.catch(function(err) {
console.error(err);
});
}
}
get_all_issues()
console.log('-----------------------------')
console.log(pendingIssues)
答案 0 :(得分:1)
这是因为您执行了异步代码。
您需要将console.log(pendingIssues)
移至then
部分(有效解决Promise之后)。
或者更好的是,您可以将get_all_issues
函数设置为Promise,如下所示:
function get_all_issues() {
return new Promise(function(resolve, reject) {
// your JIRA request etc
...
.then(function(issues){
resolve(issues)
})
.catch(function(err){
reject(err)
})
})
}
然后像这样使用您的Promise:
get_all_issues.then(function(pendingIssues){
console.log(pendingIssues)
})
您可以在以下位置找到有关Promise
的信息:https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/Promise
答案 1 :(得分:0)
将所有请求收集到一个数组中,然后您可以使用Promise.all(requestArray).then(...)在解决所有承诺后执行一些逻辑。
它看起来像这样:
for (count_issue = 0; count_issue < TotalIssues; count_issue+=50){
pendingIssues.push(
jira.searchJira(
'project= PITM',
{
startAt:count_issue,
maxResults:50,
fields:["key"],
}).then(function(issues) {
//Ensemble des tickets à traiter
console.log('--------------------------- ');
console.log(Date.now());
var pas;
for (pas = 0; pas < 50 && flag_no_more_issue != 1 ; pas++){
if (issues.issues[0] != null){
pendingIssues.push(issues.issues.pop().key)
console.log(pendingIssues.length)
//console.log(pas);
}
else{
var flag_no_more_issue = 1;
console.log('no more issue !')
}
}
}).catch(function(err) {
console.error(err);
});
}
)
}
Promise.all(pendingIssues).then(res => console.log(res))