Javascript 等待而不是等待解决承诺
这是我的小twilio函数/类,我将它导入到另一个文件中。我得到了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(
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
函数中的asynchronouswait
s之外,没有链接到任何东西。唯一的方法是等待新的承诺((解析,
)(,但在这种情况下,发送SMS
更容易成为标准函数,只需返回构建的承诺即可。(当您使用异步
函数时,您没有访问解析
等效函数的权限,但当将回调转换为承诺
时,您需要可调用的解析
)