我有一個叫weather.js文件看起來像這樣瞭解Express數據流和回調
var request = require('request');
var exports = module.exports = {};
exports.getWeather = function (cb){
request('https://api.forecast.io/forecast/apiKey/43.0796,-89.3758', function (error, response, body) {
if (!error && response.statusCode == 200) {
console.log(error);
}
else if(!error && response.statusCode == 200) {
console.log("forcast io response received");
return body;
}
});
};
和快速路徑文件:
var express = require('express');
var router = express.Router();
var weather = require("../models/weather.js")
/* GET home page. */
router.get('/', function(req, res, next) {
res.render('index', { weather: weather.getWeather() });
});
module.exports = router;
我知道我的GetWeather()函數作品因爲如果我console.log(正文)的JSON字符串打印,但它不會呈現在我的瀏覽器。我不是真正理解的是異步模式如何工作。我在想,JSON不會被打印,因爲網頁在函數被觸發/完成之前被渲染。一旦數據返回,我怎樣才能使用回調來顯示api調用的數據?
我只是在學習節點,所以很抱歉,如果這是一個愚蠢的問題,那麼爲什麼在這裏使用承諾而不是回調?我會標記這個權利,但是我在weather.js中得到了「undefined不是一個承諾」。我一直無法弄清楚爲什麼只有 – badger0053
我明白了。我需要改變它以「回報新的承諾」 – badger0053