如何创建具有相同名称的三个功能之一是回调,二是其他承诺是异步/ AWAIT
我想创建可以在3种方式被用于创建NPM依赖的函数
- 无极路
- 回调方式
- 异步/ AWAIT方式
例如
1)异步/ AWAIT
var mongoose = require('mongoose');
async function Connection() {
try {
await mongoose.connect('mongourl');
} catch (err) {
console.error("Connection error --->", err);
}
}
Connection();
2)回调风格
var mongoose = require('mongoose');
mongoose.connect('mongourl', function (err) {
if (err) console.error("Connection error --->", err);
});
3)无极风格
var mongoose = require('mongoose');
mongoose.connect('mongourl').then(() => {
}).catch(err => console.error("Connection error --->", err));
难道üabsorve即mongoose.connect是相同的名称为所有类型
回答如下:下面是一个例子,它类似于@hsz,但我已经把处理的内回调。
如果您传递一个回调反应都是在回调的方式,如果不是它返回一个承诺来代替。
如果您运行的片断,你可以看到它的行动。我已经基本上创建了随机失败,一个简单的setTimeout函数,显示错误处理是怎么也做。因此,要看到完整的效果尝试运行片断几次。
function doInner(name, callback) {
setTimeout(() => {
if (Math.random() < 0.5)
callback(null, "Did " + name);
else callback(new Error("Oops in " + name));
}, 1000);
}
function doSomething(name, callback) {
if (callback) {
doInner(name, (err, result) => {
if (callback) callback(err, result);
});
} else return new Promise((resolve, reject) => {
doInner(name, (err, result) => {
if (err) reject(err);
else resolve(result);
});
});
}
//now lets test both ways
doSomething("test callback", (err, result) => {
if (err) console.error(err);
else console.log(result);
});
(async function () {
try {
const result = await doSomething("Promise");
console.log(result);
} catch(e) {
console.error(e);
}
}());