【发布时间】:2019-12-12 04:34:02
【问题描述】:
我有种子文件
require('dotenv').config()
const db = require('./db');
const logger = require('./logger.js')
require('../models/adminModel')
var Admin = require('mongoose').model('Admins');
const seedAdmin = async () => {
const new_admin = new Admin({email: "xyx@xyz.com", password: "admin@123"});
await new_admin.save(function(err, task) {
if (err)
logger.error(`ERROR: ${err}`)
logger.success(`Admin user created sucessfully with email: ${new_admin.email}`)
});
return 'resolved'
}
async function asyncCall() {
console.log('calling');
var result = await seedAdmin();
console.log(result);
process.exit();
}
asyncCall();
这段代码的输出是
calling
resolved
我研究后写了这段代码
require('dotenv').config()
const db = require('./db');
const logger = require('./logger.js')
require('../models/adminModel')
var Admin = require('mongoose').model('Admins');
function seedAdmin() {
return new Promise(resolve => {
const new_admin = new Admin({email: "xyx@xyz.com", password: "admin@123"});
new_admin.save(function(err, result) {
if (err)
logger.error(`ERROR: ${err}`)
resolve('resolved');
logger.success(`Admin user created sucessfully with email: ${new_admin.email}`)
resolve('resolved');
});
});
}
async function asyncCall() {
console.log('calling');
var result = await seedAdmin();
console.log(result);
process.exit();
}
asyncCall();
输出正确
calling
✔ success Admin user created sucessfully with email: xyx@xyz.com
resolved
根据此声明,第一个代码应该可以工作 异步函数返回一个承诺。反之亦然。每个返回 promise 的函数都可以被认为是异步函数
我无法理解它缺少什么,我是 Nodejs 的新手 帮助将不胜感激
【问题讨论】:
-
关于异步函数返回 promise 是正确的,但是第二个块起作用而第一个块不起作用的原因是 admin.save 方法具有回调函数。在第二个块中,promise 的结构是仅在执行回调时才解析 promise。第一个块将立即解决,因为不会等待回调。
标签: node.js promise async-await