真的希望有人可以帮助我。
我要做的是:为json调用REST API并解决Angular 2的承诺。
运行Node.js / ExpressJS / Lodash的ServerAPI
Server.js文件:
var activeNumber = [
{ name: 'no 1' },
{ name: 'no 2' },
{ name: 'no 11' },
{ name: 'no 3' },
{ name: 'no 10' }
];
var numberRe = new RegExp('\\d+');
var getCustomNumber = function () {
var top = 0;
for (var i = 0; i < activeNumber.length; i++) {
var present = numberRe.exec(activeNumber[i].name);
if (present) {
var neno = parseInt(present[0]);
if (!isNaN(neno) && neno > top) {
top = neno;
}
}
}
return top;
};
执行测试http://localhost:1337/GetData?search=colorado并返回一个vaild json对象。
ClientAPI
调用HTTP请求的服务文件:
var express = require('express');
var app = express();
var bodyParser = require("body-parser");
var data = require('./data.json');
var _ = require('lodash');
var cors = require('cors');
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cors());
app.get('/GetData', function (req, resp) {
if (req.query.search != null) {
var result = _.find(data, function (o) {
return o.value === req.query.search.toLowerCase().trim()
});
return resp.send(result)
}
});
app.listen(1337, function () {
console.log('Listening at Port 1337');
});
作为ClientAPI中的本地json文件的模拟数据的解析非常有效。我需要让api查询类型的if函数起作用。
Angular应用程序启动没有问题,并且运行http.get而没有错误。我检查了dev工具下的网络选项卡,可以看到HTTP请求已完成并返回其响应是我想要解析的有效JSON对象,例如有返回的数据。然而,我解决这个问题的表格是空白的。
我做错了什么!
答案 0 :(得分:0)
问题出现在这里:
this.http.get(url)
.map(resp => resp.json())
.subscribe(getData => data = getData);
resolve(data);
您订阅了observable,但是当您之后直接致电resolve
时,它尚未“解决”。这意味着你真的只是在呼叫resolve([])
。
相反,做这样的事情:
this.http.get()./*...*/.subscribe(result => resolve(result));
您可能还想查看Observables上的toPromise
方法以及直接构造已解决的promise的方法。