Maison > Questions et réponses > le corps du texte
Après avoir mis à jour les données dans la base de données, l'actualisation de la page n'affichera pas les nouvelles données.
Le code est le suivant
data.js
var http=require('http');
var p = new Promise(function(resolve, reject){
//做一些异步操作
var json = '';
http.get('http://localhost/getinfo', function (res) {
res.on('data', function (data) {
json += data;
}).on('end',function (){
json = JSON.parse(json);
resolve(json);
})
}).on('error', function (e) {
console.error(e);
});
});
module.exports=p;
index.js
var express = require('express');
var router = express.Router();
var data=require('../serve/data.js');
router.get('/', function(req, res, next) {
data.then(function(data){
var title=new Array;
var img=new Array;
var pbi=new Array;
for(i=0;i<data.length;i++){
title[i]=data[i].pname;
console.log(title[i]);
img[i]=data[i].psrc;
pbi[i]=data[i].pbi;
}
if(req.session.un==null)req.session.un="未登录";
res.render('index',{
title:title,
un:req.session.un,
img:img,
pbi:pbi
});
});
if(req.session.un){
console.log(req.session.un);
}
});
/* GET login page. */
module.exports = router;
La solution est d'écrire le contenu de data.js dans index.js (l'écrire sous la fonction de contrôle de routage), alors maintenant j'ai une question, quel est le mécanisme de require ? Mais cela ne fonctionne toujours pas si je mets le require sous la fonction router.get, donc je voudrais demander comment actualiser les données si je veux les écrire séparément.
阿神2017-05-31 10:40:55
Après avoir appelé la méthode Promise, vous devez renvoyer l'objet Promise
phpcn_u15822017-05-31 10:40:55
L'état promis est irréversible et non répétable.
Lorsque data.js est chargé, p est attribué à un objet Promise puis exécuté, puis devient l'état Résolu, puis transmis à index.js. Lorsque http.get
se termine, le statut de p a été verrouillé sur Résolu (en supposant que cela réussisse). Quelle que soit la façon dont vous actualisez la page plus tard, p sera toujours le p d'origine et une nouvelle promesse ne sera pas régénérée.
Vous pouvez voir cet exemple :
var testData='testData'
var execute=0;
var testPromise = new Promise((resolve, reject) => {
execute++;
setTimeout(function () {
resolve(testData);
}, 1000);
})
testPromise.then((data) => {
console.log(1,data);
testData='newData'
})
setTimeout(function () {
testPromise.then((data) => {
console.log(2,data);
console.log('执行次数:'+execute)
})
}, 2000);
//最终输出
// 1 'testData'
// 2 'testData'
// 执行次数:1