2016-02-27 3 views
1

Я искал и читал какое-то время и просто не могу понять, как добиться следующих результатов только с обратными вызовами. Я знаю, что это должно быть «простым» и не хотеть использовать обещания или любые другие библиотеки для его решения, поскольку я хочу понять, как добиться этого только с помощью обратных вызовов.Использование обратного вызова Nodejs/Javascript - Ожидание вызова API

Я использую Node.js для создания веб-формы, которая, если не предоставляется номер инцидента JIRA, создаст билет, а затем отправит уведомление по электронной почте с номером.

Что у меня есть ... псевдокод:

function jiraCreate(req, res) { 
    if req.body.inc is blank { 
     var jiraInc = jiraAPI call to create ticket; 
    } else { 
     jiraInc = req.body.inc; 
    } 
    return jiraInc; 
} 

function jiraComment(req, res, jiraInc) { 
    jiraCommentAPI(jiraInc) // jiraAPI call to add comments to the provided jiraInc 
} 

function handleJira(req, res) { 
    var jiraInc = jiraCreate(req, res); 
    jiraComment(req, res, jiraInc); 
} 

handleJira(req, res); 

Конечно, с вышеизложенным, если req.body.inc пустым, jiraComment будет просто выполнить и утверждают, что инцидент не существует. Как мне переписать его с помощью обратных вызовов для достижения моей цели? Является ли это возможным?

Я так много читал о обратных вызовах и просто не могу понять. Независимо от того, как я пишу свой код, jiraComment, похоже, всегда работает первым. Я очень ценю любую помощь!

Спасибо!

ответ

1

«jiraAPI призыв создать билет» асинхронный ... то есть, когда вы вызываете код что-то вдоль линий

http.request(options, function(res) { 
    console.log('STATUS: ' + res.statusCode); 
    console.log('HEADERS: ' + JSON.stringify(res.headers)); 
    var body = ""; 
    res.setEncoding('utf8'); 
    res.on('data', function(chunk) { 
    body += chunk; 
    }); 
    res.on('end', function() { 
     // {1} Here you can continue with next step 
    }); 
}).end(); 

Вы должны разместить код для следующего шага в {1}. Размещение его, как вы сделали, сразу после того, как запрос не будет работать.

Смежные вопросы