使用从内部函数返回的异步数据对外部函数返回promise
Return a promise on an external function with async data returned from an inner function
我正在设计一个用户API,API的部分代码如下:
module.exports = {
findByEmail: (email) => {
db.collection('Users').findOne(email: email), (err, result) => {
assert.equal(err, null);
return new Promise(resolve) => {
resolve(result);
}
}
}
}
我的意图是让findByEmail
返回一个promise,以便可以调用它,例如:
require('./models/User').findByEmail({email: 'user@example.com'})
.then((user) => {
console.log('User account', user);
});
然而,像上面那样定义我的API并不能实现我想要的,因为内部函数是返回promise的函数,而外部函数(即findByEmail
)最终没有返回promise。如何确保外部函数使用内部函数返回的数据返回promise?
当然,让外部函数接受回调是一种选择,但这意味着外部函数不再具有可承诺性。
首先返回promise,然后让promise回调函数完成其余操作。
module.exports = {
findByEmail: (email) => {
return new Promise((resolve, reject) => {
db.collection('Users').findOne(email: email), (err, result) => {
// assert.equal(err, null);
if (err) {
reject(err);
}
resolve(result);
}
}
}
}
这里我调用listings(),在得到响应后,在其中进行jquery ajax调用,我将promise返回到从外部文件调用的函数getlistings(
function Listings(url){
var deferred = new $.Deferred();
$.ajax({
url: url,
method: 'GET',
contentType: 'application/json',
success: function (response) {
deferred.resolve(response);
},
error: function (response){
deferred.reject(response);
}
});
return deferred.promise();
};
// call from external file
function getListings(){
Listings('/listings.json').then(function(response){
console.log(response);
});
}
相关文章:
- AJAX调用并在Node中获取返回数据
- 角度服务未返回数据
- 统计ajax返回数据中的html元素
- 有没有更好的方法可以测量从Ajax调用返回数据所需的总时间
- Imgur API图像搜索未返回数据
- javascript对象显示为null,但object.properties返回数据
- 如何从ajax调用JQuery返回数据
- 试图从嵌套的回调函数返回数据
- NodeJS FS 不从多个文件返回数据
- ajax函数未在C#中返回数据
- 如何在公共js模块中从web服务返回数据
- 将字符串与 JSON 对象组合以返回数据
- 嵌套异步函数未及时返回数据的问题
- NodeJS JSONStream 以一个长字符串的形式返回数据
- 如何使用 HTML 图像请求将数据发送到服务器,或返回数据作为响应
- 从 Angular 模态服务中的模态主体模板返回数据
- jQuery 每个循环返回数据两次
- $.getJSON 在返回数据后不会运行函数
- 如何访问返回数据中的特定json值
- 工厂返回数据后未设置角度$scope