Я был разработчиком PHP, я пытаюсь написать код, используя node.js для praticing. M запутаться в node.js, когда я выполняю свою программу, строка кода переходит к следующей строке.Запуск node.js proccess шаг за шагом
Это часть моего кода:
//article.js
var article_model = require('../models/article_model');
var comment_model = require('../models/comment_model');
var list_article,list_comment;
app.set('views','./views/article/');
app.set('view engine','ejs');
app.get('/list_article',csrfProtection,function(req,res){
master_model.get_article(req,xparams,function(status,result,total_data){
list_article = result.data;
});
console.log(list_article);
master_model.get_comment(req,xparams,function(status,result,total_data){
list_comment = result.data;
});
console.log(list_comment);
var params = {
title : "Article List",
data_article : list_article,
};
res.render('content.ejs',params);
});
, а затем
//master_model.js
exports.get_article = function (req,hash, fn) {
var auths = {
user : api_server["auth_username"],
pass : api_server["auth_password"],
}
request.get({url:"http://myapi.com/article/latest", auth:auths } , function(err,httpResponse,body) {
if (!err && httpResponse.statusCode == 200) {
var temp = JSON.parse(body);
if (temp.status == 1){
result_data = {status:1, message : temp.message ,data : temp.data};
return fn(true,result_data,1);
}else if(temp.status == 0){
result_data ={ status:0, message : temp.message};
return fn(false,result_data,0);
}
}else{
result_data ={ status:0, message : "error, please try again"};
return fn(false,result_data,0); //something problem to API
}
})
};
exports.get_comment = function (req,hash, fn) {
var auths = {
user : api_server["auth_username"],
pass : api_server["auth_password"],
}
request.get({url:"http://myapi.com/comment/latest", auth:auths } , function(err,httpResponse,body) {
if (!err && httpResponse.statusCode == 200) {
var temp = JSON.parse(body);
if (temp.status == 1){
result_data = {status:1, message : temp.message ,data : temp.data};
return fn(true,result_data,1);
}else if(temp.status == 0){
result_data ={ status:0, message : temp.message};
return fn(false,result_data,0);
}
}else{
result_data ={ status:0, message : "error, please try again"};
return fn(false,result_data,0); //something problem to API
}
})
};
когда я запускаю мой код, и откройте браузер, выходные данные пустым, когда я обновить снова мой браузер шоу Ouput мои данные (список artcile и commment список)
и я смотрю свою консоль, если первый запуск
output : {
id : 1
title : title 1..
...
..
}
undefined
Если я снова обновить свой браузер, весь вывод полного, чтобы показать (не показывать неопределенным)
Моим вопрос: Как сделать мой код запустить процесс шаг за шагом до конца процесса и доставить просмотры?
Любая проблема с моим кодом?
Спасибо!
Код не прыгает. Javascript является линейным, за исключением случаев, когда событие вызывает обратный вызов (который лучше описывается как асинхронный, чем нелинейный). Когда браузер делает запрос на маршруте, функция, обрабатывающая запрос, вызывается, и все строки будут вызываться по порядку, внутри обратного вызова. – SamMorrowDrums
@SamMorrowDrums благодарит за ответ. так как мой код синхронизируется на линии.? – helo1987
Я не знаю, с чего начать с вышеизложенного - у вас слишком много дел. Вероятно, вам следует начать с разбивки на более мелкие программы. Сделайте базовый мир привет ... узнайте, как работают обратные вызовы, и как вы можете управлять состоянием, без использования аутентификации, ejs и нескольких модулей ... Это слишком сложно, чтобы делать предложения. 'app.set ('views', './views/article /');' - похоже, что вы используете экспресс-модуль, однако затем вы, похоже, используете стандартный HTTP-сервер. Думаю, вы слишком сильно вскочили. Если вы можете выделить несколько функций, вам не нужно долго ждать, чтобы вернуться к этой точке – SamMorrowDrums