了解Promise.fromCallback

时间:2018-02-19 05:33:52

标签: javascript promise bluebird

我正在阅读一篇文章Promises 我遇到了Promise.fromCallBack。我浏览了这篇文章但却无法完全理解它。

任何人都可以解释Promise.fromCallBack做什么以及何时使用它?

2 个答案:

答案 0 :(得分:0)

<强> TL; DR

Promise.fromCallBack returns a promise。如果要在运行中将函数包装在promise中,则使用此方法。

const Promise = require('bluebird')
const User = require('./models/user')

return Promise.fromCallback((cb) => {
  User.findById(ID, cb)
})
  .then(user => console.log(user))

基本上是

 const Promise = require('bluebird')
 const User = require('./models/user')

 return // the result of User.findById(ID) in a resolver function 
  .then(user => console.log(user))

更长的版本:

基于the original blogPromise.fromCallback是使用Promise((resolve, reject))

的替代方法
return new Promise((resolve, reject) => {
  User.findById(ID, (err, user) => {
    if (err) {
      return reject(err)
    }
    return resolve(user)
  })
})
  .then(user => console.log(user))

基于bluebird description of new Promise,上述代码为User.findById(ID, callback)创建了一个承诺,除了将其包装在解析器函数(resolve, reject) => {}中。

User.findById(ID, resultCallback)表示:

User.findById(ID).then((user) => {...}).catch((err) => {}) 

.then部分由resolve()创建,.catch部分由reject()创建。现在,解析器基本上创建了rejectresolve函数。

在博客中,我们可以看到promise.fromCallback传递回调函数而不是手动创建解析器函数。

return Promise.fromCallback((cb) => {
  User.findById(ID, cb)
})
  .then(user => console.log(user))

这基本上包含了promise中回调的结果并解析/拒绝它。

答案 1 :(得分:-1)

回调函数源自称为函数式编程的编程范例。在基础层面,函数式编程指定函数作为参数的使用。

回调函数,也称为高阶函数,是一个传递给另一个函数的函数(让我们将其他函数调用“otherFunction”)作为参数,并在内部调用(或执行)回调函数另一个功能。回调函数本质上是一种模式(对常见问题的既定解决方案),因此,回调函数的使用也称为回调模式。

&#13;
&#13;
let promise = doSomething(); 
promise.then(successCallback, failureCallback);
&#13;
&#13;
&#13;

Read More: