最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

如何创建具有相同名称的三个功能之一是回调,二是其他承诺是异步 AWAIT

运维笔记admin12浏览0评论

如何创建具有相同名称的三个功能之一是回调,二是其他承诺是异步/ AWAIT

如何创建具有相同名称的三个功能之一是回调,二是其他承诺是异步/ AWAIT

我想创建可以在3种方式被用于创建NPM依赖的函数

  1. 无极路
  2. 回调方式
  3. 异步/ 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);
  }
}());
发布评论

评论列表(0)

  1. 暂无评论