node.js - express不会刷新数据

浏览:39日期:2022-09-09

问题描述

我在数据库里更新数据后,刷新页面不会显示新的数据。代码如下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;

解决方法就是讲data.js里的内容写到index.js里就行了(写到路由控制函数下),所以现在我有一个疑问,就是require的机制是什么样的,是定义后立即执行吗?但是我将require放到router.get函数下依然没有用,所以想问下如果要分开写,怎么实现刷新数据。

问题解答

回答1:

Promise调用方法后,需要返回Promise对象吧

回答2:

Promise状态是不可逆、不可重复的。当data.js被加载时,p被赋值成一个Promise对象,并在后续执行,然后变成Resolved状态,然后交给了index.js中。当http.get结束后,这个时候p的状态已经被锁定成Resolved(假定成功了),无论你后面如何刷新页面,p都还是原来的p,不会重新产生一个新的Promise。可以看这个例子:

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

相关文章: