私はPHP開発者でしたが、私はpraticingのためにnode.jsを使ってコードを書こうとしています。プログラムを実行すると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
}
})
};
私は私のコード、および開いているブラウザを実行したときに、私は再び私のブラウザのショーを更新すると、出力データは、空白であります私のデータ出力に含ま(artcileリスト、およびcommmentリスト)
と最初の実行
場合、私は私のコンソールを見て私は再び私のブラウザを更新した場合、完全なすべての出力は、(未定義示していない)表示する
私の質問:私のコードは、処理終了までのステップによる処理ステップを実行させるとビューに提供する方法 ?
私のコードに問題がありますか?
ありがとうございます!
コードがジャンプしません。 Javascriptは、イベントがコールバックをトリガする場合を除いて、線形です(これは、非線形よりも非同期としてよく記述されます)。ブラウザがルート上でリクエストを行うと、リクエストを処理する関数が呼び出され、すべての行がコールバック内で順番に呼び出されます。 – SamMorrowDrums
@SamMorrowDrums答えに感謝します。どのように私のコードがライン上で同期するのですか? – helo1987
私はどこから始めるべきかわかりません - あまりにも多くのことが起こっています。おそらくこれを小さなプログラムに分割して開始するべきです。基本的なこんにちはの世界をやろう...コールバックの仕組みや、認証、ejs、複数のモジュールを使わずに状態を管理する方法を学ぶ...これは提案するのが難しい。あなたが標準のHTTPサーバを使用しているように見えますが、あなたがmodule expressを使用しているように見える 'app.set( 'views'、 '。/ views/article /');'私はあなたがあまりにも深く入り込んだと思う。あなたがいくつかの機能を分離することができれば、この点に戻るのにあなたは長くかかりません。 – SamMorrowDrums