Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/402.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 我正在等待一个来自我正在创建的模块的类方法的返回承诺,我得到了它,但是在一个奇怪的上下文中。我怎样才能正确地等待呢?_Javascript_Node.js_Promise_Async Await_Es6 Promise - Fatal编程技术网

Javascript 我正在等待一个来自我正在创建的模块的类方法的返回承诺,我得到了它,但是在一个奇怪的上下文中。我怎样才能正确地等待呢?

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

因此,我使用类方法(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) => {

    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));