从参数函数中获取值

时间:2018-01-08 23:46:53

标签: javascript node.js jira-rest-api

抱歉Noob问题。我正在尝试编写一个名为“getTransitionId”的node.js函数,该函数使用jira-connector插件检索特定问题的可能转换数据。

jira-connector中的getTransitions函数有两个参数:一个带有票证参数的对象,以及一个调用完成后要执行的函数。

这是我的问题:由于超出此问题范围的原因,我想在作为参数传递给“getTransitions”的函数之外访问此数据。但我无法弄清楚如何。我理解最后一个return语句(返回“transitionData”)返回“undefined”,因为它在调用完成之前执行了一个return语句,但我不知道如何修复它。

在这种情况下我可以正确使用回调吗?如果是这样,我将如何在作为参数传递给另一个函数的函数中使用它?

const JiraApi = require('jira-connector');

const jira = new JiraApi( {
    host: //Jira URL
    basic_auth: {
        //Authentication Information
    }
});


function getTransitionId (ticketNumber, transition) {
    jira.issue.getTransitions({
        issueKey: ticketNumber,
    }, function(error, transitions){
        const transitionData = transitions['transitions'];
    });

return transitionData;
}

感谢您的帮助。希望这是有道理的。

1 个答案:

答案 0 :(得分:1)

您可以让自己的getTransitionId函数将回调函数作为参数。这是一个不完整的示例(见前面):

function getTransitionId (ticketNumber, transition, callback) {
    jira.issue.getTransitions({
        issueKey: ticketNumber,
    }, function(error, transitions){
        const transitionData = transitions['transitions'];
        const id = /* ..get ID fron transitionData, somehow.. */
        callback(id);
    });
}

// Called like this:
getTransitionId(ticketNumber, transition, function(id) {
    console.log("Got the ID:", id);
});
但是,这并不完美。如果getTransitions出错,该怎么办?

当您致电jira.issue.getTransitions时,您会传递一个回调函数,该函数需要两个参数:errortransitions。这是在JavaScript中进行回调的函数的标准 - 也就是说,回调通常采用错误参数(如果没有错误则为null或未定义)和数据参数(包含操作的结果,如获取的transitionsid)。

我们可以更改getTransitionId以接收错误,然后将错误传递给您提供给getTransitionId的回调:

function getTransitionId (ticketNumber, transition, callback) {
    jira.issue.getTransitions({
        issueKey: ticketNumber,
    }, function(error, transitions){
        if (error) {
            callback(error);
            return;
        }
        const transitionData = transitions['transitions'];
        const id = /* ..get ID fron transitionData, somehow.. */
        callback(null, id);
    });
}

(请注意,我们在return;中使用if (error)语句 - 这样我们就不会继续尝试使用transitions参数,这可能是 < / em> undefined,因为jira.issue.getTransitions中存在错误。这也会阻止第二次调用callback。)

由于我们添加了error参数,因此我们需要更改调用getTransitionId的方式:

getTransitionId(ticketNumber, transition, function(error, id) {
    if (error) {
        console.error("There was an error fetching the transition ID:", error);
        return;
    }
    console.log("Got the ID:", id);
}

(由于我们在callback(null, id);的代码中getTransitionId errornull将为if (error) {,因此if (error) {中的代码将无法运行。当然,如果 错误,{/ 1}} 运行,这就是我们想要的!)

通过添加代码来处理传递给回调的error代码,可以使代码更安全。相比之下,如果您忽略 error,您可能最终在代码中遇到难以找到的错误 - 例如,您可能遇到TypeError,因为transitions未定义,或者在日志中看到“获得ID:未定义”!