我使用了一个设计模式(模块模式)来创建一个函数,然后调用一个函数,该函数返回一个promise,但它返回“undefined”
为什么?这是我的代码:
// spotcrime ----- finds crime loggings of any given area lat/lon + radius
const Crimes = (function () {
let data;
let InitCrimes = function (latitude, longitude, radius) {
let location = {
latitude: latitude,
longitude: longitude
}
spotcrime.getCrimes(location, radius, (err, crimeData) => {
if (err) console.log(err);
data += crimeData;
});
return new Promise ((resolve,reject) => {
if (data !== undefined || data !== null) {
resolve(data);
} else {
reject(err);
}
});
}
return {
el_monte: function (latitude, longitude, radius) {
InitCrimes(latitude, longitude, radius)
.then(function(crimeData) {
console.log(crimeData);
}).catch(function(error) { return error; });
}
}
}());
// 34.052901, -118.019821 // el monte
Crimes.el_monte(34.052901, -118.019821, 0.5);
答案 0 :(得分:0)
那是因为您忘记了return
中的el_monte
个关键字,并且因为InitCrimes
函数中的范围完全搞砸了(在调用之前,您还没有等待异步回调) resolve
)。
您的代码应如下所示:
const Crimes = (function () {
function initCrimes(latitude, longitude, radius) {
return new Promise((resolve,reject) => {
spotcrime.getCrimes({latitude, longitude}, radius, (err, crimeData) => {
if (err) {
reject(err);
} else {
resolve(crimeData);
}
});
});
}
return {
el_monte(latitude, longitude, radius) {
return initCrimes(latitude, longitude, radius).then(data => {
console.log(data);
return data;
});
}
}
}());
Crimes.el_monte(34.052901, -118.019821, 0.5).then(data => {
// do something with the data;
}).catch(error => {
console.error(error);
});