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
的实现没有影响。