Javascript 在对象中声明异步函数/承诺
我有一个函数,它返回一个带有“导出”函数的对象。在这些导出函数中,我希望使用承诺Javascript 在对象中声明异步函数/承诺,javascript,async-await,es6-promise,Javascript,Async Await,Es6 Promise,我有一个函数,它返回一个带有“导出”函数的对象。在这些导出函数中,我希望使用承诺 var DATABASE = (function () { var exports = {}; exports.query = function(filter = {}) { return true; } return exports; }()); console.log(DATABASE.query()); 我试图使这个函数异步。但我得到DATABASE.query不是一个函数
var DATABASE = (function () {
var exports = {};
exports.query = function(filter = {}) {
return true;
}
return exports;
}());
console.log(DATABASE.query());
我试图使这个函数异步。但我得到DATABASE.query不是一个函数
var DATABASE = (async function () {
var exports = {};
exports.query = await function(filter = {}) {
return true;
}
return exports;
}());
console.log(DATABASE.query());
我用承诺尝试了一下,它看起来很有效,但我认为wait/async是更好的编码方式
var DATABASE = (function () {
var exports = {};
exports.query = function(filter = {}) {
return new Promise(function(resolve, reject) {
resolve(true);
});
}
return exports;
}());
DATABASE.query().then(function(result) {
console.log(result);
});
您能帮我将其转换为异步/等待吗?您需要使您的
查询
方法异步,而不是模块模式(不必要)使用的IIFE:
const DATABASE = (function () {
const exports = {};
exports.query = async function(filter = {}) {
// ^^^^^
return true;
};
return exports;
}());
console.log(DATABASE.query());
如果IIFE是一个
异步
函数,那么数据库
就是对象的承诺。在这种情况下,没有必要使用异步
,因为等待函数(){…}
没有任何意义;是查询
函数应该是异步的
。您能再解释一下吗?有可能使用它async wait?将async
放在函数定义上会使它返回一个承诺。因此,请查看您对数据库所做的操作
如果您想使查询
异步,那么在将其分配给导出时,您不应该等待它exports.query=async()=>{wait blah();return true;}
可能吗?对但你这样做毫无意义async
函数总是返回承诺,iLife不需要是async
函数。但是我得到的承诺返回的值不是true。但是您希望query
返回承诺,不是吗?当然,要记录结果而不是承诺,您可以使用DATABASE.query()。然后(console.log)
或console.log(await DATABASE.query())
,但从您问题中的演示中,您似乎已经知道了这一点。是的,但await不起作用似乎await不在全局范围内起作用。所以只有到那时()才有可能。是的。但是对query
的实现没有影响。