私はnodejs/typescript /約束を比較的新しくしていますので、私は約束を守る正しい方法が不明です。約束事をどのように結びつけるのですか?
私はIPに基づいてジオロケーションをフェッチするためにREST APIを呼び出すヘルパークラスを持っています。私は全体の反応には興味がなく、都市のフィールドだけに興味があります。解決したら街のフィールドだけを取得するという約束を正しく返すにはどうすればいいですか?ここ
var rest = require("axios");
const ENDPOINT = "http://freegeoip.net/json/";
@Service()
export class GeoIp {
city(ip: string): Promise<any> {
let promise: Promise<any>;
let p = rest.get(ENDPOINT + ip);
p.then((response) => {
promise = Promise.resolve(() => {return response.data["city"]});
}, (error) => {
promise = Promise.reject(() => { return error});
});
return Promise.resolve(p).then((data)=>promise);
}
}
は、受信されたデータオブジェクトが元のREST応答オブジェクト
import chai = require('chai');
import {GeoIp} from "../../server/services/GeoIp";
var assert = chai.assert;
describe("GeoIp service",() => {
let geoIp: GeoIp;
beforeEach("Initialize service",() => {
geoIp = new GeoIp();
});
var IP_VALID = "137.118.222.187";
it(`Check geolocation of ${IP_VALID}`, (done) => {
let promise = geoIp.city(IP_VALID);
promise.then((data) => {
console.log(data);
assert.equal(data, "Traphill");
done();
});
});
});
答えに示されているとおり、あなた自身の約束をする必要はありません。確かにそうすることは、[反パターン](https://github.com/petkaantonov/bluebird/wiki/Promise-anti-patterns#the-deferred-anti-pattern) – cartant