栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何将这些功能与承诺链接在一起?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何将这些功能与承诺链接在一起?

如果您想将这些函数与Promise链接在一起,则它们必须 返回Promise

如果要将它们与

async
模块链接,则它们必须 将回调 作为参数。

现在, 他们既不返回诺言 (或其他任何东西), 也不以回调
(或其他任何东西)为参数。如果该函数不执行回调并且不返回任何内容,则您只能调用它而已。您将不会收到任何结果的通知。

回呼

如果您有3个采用回调的函数:

function fun1(cb) {  setTimeout(() => {    cb(null, "fun1");  }, 1000);}function fun2(cb) {  setTimeout(() => {    cb(null, "fun2");  }, 3000);}function fun3(cb) {  setTimeout(() => {    cb(null, "fun3");  }, 100);}

然后,您可以知道何时完成:

fun3((err, value) => {  console.log('fun3 finished:', value);});

您可以轻松地等待一个,然后再开始另一个:

fun1((err1, val1) => {  fun2((err2, val2) => {    console.log("fun1 + fun2:", val1, val2);  });});

承诺

如果函数返回promise:

function fun1() {  return new Promise((res, rej) => {    setTimeout(() => {      res("fun1");    }, 1000);  });}function fun2() {  return new Promise((res, rej) => {    setTimeout(() => {      res("fun2");    }, 3000);  });}function fun3() {  return new Promise((res, rej) => {    setTimeout(() => {      res("fun3");    }, 100);  });}

然后,您还可以知道它们何时完成:

fun3().then(value => {  console.log('fun3 finished:', value);});

您还可以轻松地嵌套调用:

fun1().then(val1 => {  fun2().then(val2 => {    console.log("fun1 + fun2:", val1, val2);  });});

要么:

fun1().then(val1 => fun2()).then(val2 => fun3()).then(val3 => console.log('All 3 finished in series'));

等等

为了能够同时使用这两种样式,请参见以下文档:

  • http://caolan.github.io/async/
  • http://bluebirdjs.com/docs/getting-started.html
  • https://developer.mozilla.org/en/docs/Web/Javascript/Reference/Global_Objects/Promise


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/448374.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号