Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/399.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_Asynchronous_Async Await - Fatal编程技术网

Javascript 等待而不是等待解决承诺

Javascript 等待而不是等待解决承诺,javascript,node.js,asynchronous,async-await,Javascript,Node.js,Asynchronous,Async Await,这是我的小twilio函数/类,我将它导入到另一个文件中。我得到了err和res在这里,我将它作为承诺返回 class TwilioService { sendSms(to, message) { return this.twilio.sendMessage(sms,(err,res) => { return new Promise((resolve, reject) => { if (err) { console.log(

这是我的小twilio函数/类,我将它导入到另一个文件中。我得到了
err
res
在这里,我将它作为承诺返回

class TwilioService {
  sendSms(to, message) {
    return this.twilio.sendMessage(sms,(err,res) => {
      return new Promise((resolve, reject) => {
        if (err) {
          console.log(err)
          return resolve(res)
        } else {
          console.log(res, 'ppppppppppppppppp')
          return reject(res)
        }
      })
    })
  }
}
现在这是我的函数,我正在使用这个函数

但是当我执行
console.log(sendSms)
时,我在控制台中得到了未定义的内容,即使我正在从twilio函数返回承诺。我在这里做错了什么

import Twilio from '../../services/twilio'
const twilio = new Twilio()
const handler = async(request, reply) => {
  try {
    const sendSms = await twilio.sendSms(`+91${mobile}`, `Welcome to App. User ${verificationCode} as your signup OTP.`)
    console.log(sendSms, 'oooooooooooooooo')
  } catch(err) {
    console.log(err)
  }
}
请帮忙!!!谢谢

您现在返回的回调可能不会返回
承诺
-切换顺序,返回
承诺
,该承诺在
发送消息
回调运行时解决。还请注意,如果出现
错误,则应
拒绝
;如果没有
错误,则应
使用
res
解决
,而不是相反:

class TwilioService {
  sendSms(to, message) {
    return new Promise((resolve, reject) => {               // switch these two lines
      return this.twilio.sendMessage(sms, (err, res) => {   // switch these two lines
        if (err) {
          console.log(err)
          return reject(res) // reject on error, don't resolve
        } else {
          console.log(res, 'ppppppppppppppppp')
          return resolve(res) // resolve when there's no error
        }
      })
    })
  }
}

这太棒了。你马上就回答了。伟大的善解人意的人。最后一个问题将拒绝异步函数的catch部分中的抛出错误?我可以在5分钟内接受这是正确的-当
Promise
拒绝时,如果该
Promise
在其他地方被
wait
调用,则该
wait
行将抛出错误(调用
reject
的错误),如果
wait
行在
try
块中,则可以捕获该错误,因此,当代码运行正常时,
catch
块中的流将继续。最后一个问题我是否可以使
sendSms
异步并从中返回值,而不是使用
new Promise
语法?因为异步函数本身会返回一个promiseNo,而
async
函数会自动返回一个
Promise
,所以
Promise
除了
async
函数中的asynchronous
wait
s之外,没有链接到任何东西。唯一的方法是等待新的承诺((解析,
)(,但在这种情况下,
发送SMS
更容易成为标准函数,只需返回构建的承诺即可。(当您使用
异步
函数时,您没有访问
解析
等效函数的权限,但当将回调转换为
承诺
时,您需要可调用的
解析