node.js - express不會刷新數據
漂亮男人
漂亮男人 2017-05-31 10:38:55
0
2
781

我在資料庫更新資料後,重新整理頁面不會顯示新的資料。
程式碼如下
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函數下方還是沒用,所以想問下如果要分開寫,怎麼實作刷新資料。

漂亮男人
漂亮男人

全部回覆(2)
阿神

Promise呼叫方法後,需要回傳Promise物件吧

phpcn_u1582

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
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板