在檔案 users.js 中,我想code退出randomCode()分配給result并在整個端點中使用它'/login'。
隨機代碼.js
const crypto = require('crypto')
const randomCode = (callback) =>{
crypto.randomInt(100000, 999999, (err, n) => {
if (err) throw err;
callback(n);
});
}
module.exports = randomCode
用戶.js
require('dotenv').config()
const express = require('express')
const router = express.Router()
const randomCode = require('../controllers/randomCode')
router.get('/login', async (req, res, next)=>{
try{
//-----------------------------------------------------
randomCode((code) => {
console.log(code,'code')
})
//-----------------------------------------------------
return res.send('ok')
}
catch(error){
res.send(error)
}
})
module.exports = router;
我嘗試使用await但沒有結果。
router.get('/login', async (req, res, next)=>{
try{
//------------------------------------------------------
const result = await randomCode((code) => {
console.log(code,'code')
})
console.log(result)
//------------------------------------------------------
return res.send('ok')
}
catch(error){
res.send(error)
}
})
uj5u.com熱心網友回復:
會有不同的方法(尤其是crypto.randomInt可以同步呼叫的方法),但我知道您對如何從異步函式中獲取值特別感興趣,所以我會回答:
const randomCode = function(){
return new Promise((resolve, reject) => {
crypto.randomInt(100000, 999999, (err, n) => {
if( err ){
reject( err );
} else {
resolve( n );
}
});
});
}
router.get('/login', async (req, res, next)=>{
try{
const code = await randomCode();
console.log(code)
return res.send('ok')
}
catch(error){
res.send(error)
}
})
如果由于某種原因無法更改randomCode()函式,則需要將其包裝到 Promise 中,例如:
const randomCodePromise = function(){
return new Promise((resolve, reject) => {
randomCode((code) => {
resolve( code );
})
});
}
(顯然然后使用await randomCodePromise()代替await randomCode())
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/411564.html
標籤:
上一篇:NodeJs如何將父子json陣列轉換為json物件,其中包含所有childes的key-id和value陣列
下一篇:給定套接字斷開連接終止承諾
