为了账号安全,请及时绑定邮箱和手机立即绑定

Javascript 无法在承诺中找到我的功能

Javascript 无法在承诺中找到我的功能

GCT1015 2022-10-13 16:01:41
我想调试一个返回承诺的函数,为此我需要一个睡眠函数。我找到了这个:function sleep(ms) {  return new Promise((resolve) => {    setTimeout(resolve, ms);  });} 它在承诺之外使用时有效。但是,当我想在承诺中使用它时,我得到了错误,即找不到睡眠。这是我的代码:async function f(filename) {  return new Promise((resolve, reject) => {    await sleep(1000);    /*      rest of function    */  });}
查看完整描述

3 回答

?
千万里不及你

TA贡献1784条经验 获得超9个赞

但是,当我想在承诺中使用它时


你永远不应该在executor中创建另一个new PromisePromise 。相反,调用sleep周围函数内的函数f(您已经标记为async,大概是使用await关键字):


async function f(filename) {

  await sleep(1000);

  return new Promise((resolve, reject) => {

    /* rest of function  */

  });

}

您的问题也是该(resolve, reject) => {…}函数不是async,因此尝试在await内部使用存在语法错误(在严格模式下),并且还可能导致有关.sleep之后的意外令牌的错误消息await。


查看完整回答
反对 回复 2022-10-13
?
白衣非少年

TA贡献1155条经验 获得超0个赞

您好尝试使用下面的代码在返回代码中添加异步,因为您在返回中使用等待


function sleep(ms) {

    return new Promise((resolve) => {

        console.log('inside sleep');

      setTimeout(resolve, ms);

    });

  } 

   function f(filename) {

    return new Promise( async(resolve, reject) => {

      await sleep(7000);

      

      /*

        rest of function

      */

    });

  }


查看完整回答
反对 回复 2022-10-13
?
MMMHUHU

TA贡献1834条经验 获得超8个赞

尝试将函数 f 中的 return new Promise((resolve, reject) => {}) 替换为 return new Promise(async(resolve, reject) => {})。我希望它能解决你的问题


async function f(filename) {

  return new Promise(async (resolve, reject) => {

    await sleep(1000);


    /*

      rest of function

    */

  });

}


查看完整回答
反对 回复 2022-10-13
  • 3 回答
  • 0 关注
  • 87 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信