Javascript 我正在等待一个来自我正在创建的模块的类方法的返回承诺,我得到了它,但是在一个奇怪的上下文中。我怎样才能正确地等待呢?
因此,我使用类方法(schedule)创建了一个模块,其中异步函数等待返回Javascript 我正在等待一个来自我正在创建的模块的类方法的返回承诺,我得到了它,但是在一个奇怪的上下文中。我怎样才能正确地等待呢?,javascript,node.js,promise,async-await,es6-promise,Javascript,Node.js,Promise,Async Await,Es6 Promise,因此,我使用类方法(schedule)创建了一个模块,其中异步函数等待返回 //SCHEDULER.JS// class Schedule { constructor(project_id, queue_id) { this.project_id = project_id; this.queue_id = queue_id; } //ASYNC METHOD 1 schedule = async (date, rquest) => { con
//SCHEDULER.JS//
class Schedule {
constructor(project_id, queue_id) {
this.project_id = project_id;
this.queue_id = queue_id;
}
//ASYNC METHOD 1
schedule = async (date, rquest) => {
const project = this.project_id;
const queue = this.queue_id;
const location = "us-central1";
const url = rquest.url;
const payload = rquest.body;
// Construct the fully qualified queue name.
const parent = client.queuePath(project, location, queue);
const task = {
httpRequest: {
httpMethod: rquest.method,
url,
headers: rquest.headers,
},
};
try {
const request = await { parent, task };
const [response] = await client.createTask(request);
console.log("<THIS IS THE PROJECT ID> :", response.name);
return `${response.name}`;
} catch (error) {
console.log("we have an error amigo!", error);
}
};
//ASYNC METHOD 2
delete = async (one) => {
return console.log("delete function", one);
};
task_id正在返回承诺,我无法执行scheduler.delete(task_id),因为它仍然是挂起的承诺
重要提示:我的任务只是创建模块,而不是main.js,因此如何正确处理这个承诺。创建main.js的人只需运行我的方法,而不必处理promise返回。您可以创建另一个函数,该函数将从main.js调用,并在此函数内调用您的实际函数,然后在promise函数中返回值。TLDR 任务id正在返回承诺 如果这是一个承诺,你可以等待它
//main.js//
async function main () {
const task_id = await scheduler.schedule(date, request); // <--- THIS!
scheduler.delete(task_id);
}
main();
使用该方法的人只需要知道它会返回一个承诺,并且必须这样对待它。你不能做出承诺<代码>调度程序。计划(日期,请求)。然后(调度程序。删除)谢谢。我的印象是,他们会使用我的方法而不创建异步函数,但根本没有办法。他们真的应该等待我从方法返回,否则delete方法将无法工作。我很感激。谢谢你回答我的新手问题。推论是,如果这不是一个承诺,你就不能等待它。很多人对此感到困惑,他们希望
等待处理类似setTimeout()
的事情,这是异步的,但不会返回承诺。“async”作为“asynchronous”函数的缩写形式,与标有async
关键字的函数有很大区别,它们是承诺返回函数。@Ruvin不客气。希望这个答案也能帮助其他人搜索这个问题。谢谢你问这个问题
//main.js//
async function main () {
const task_id = await scheduler.schedule(date, request); // <--- THIS!
scheduler.delete(task_id);
}
main();
//main.js//
scheduler.schedule(date, request)
.then(task_id => scheduler.delete(task_id));