我在玩弄promise和回调,想知道如果没有回调被传递,写一个返回promise的函数的正确方法是什么。
我的结果看起来是这样的,但我不确定这是否正确(反模式的意思)
const mySuperFunction = function mySuperFunction(data, cb) {
let wrapper = new Promise((resolve, reject) => {
setTimeout(() => {
if (Math.random() >= 0.5) {
resolve(Date.now());
} else {
reject(new Error("Not today..."));
}
}, 100);
});
if (cb) {
wrapper.then((result) => {
cb(null, result);
}, (error) => {
cb(error);
});
} else {
return wrapper;
}
};
mySuperFunction().then((time) => {
console.log(time)
}).catch((err) => {
console.log(err);
});
mySuperFunction(null, (err, time) => {
console.log(err, time)
});
它很简单:创建一个函数,并将“工作”代码包装在一个promise中。如果没有回调传递给我的函数,我返回包装的promise。如果一个回调被传递,我从包装/调用它。然后(...)
和。抓住(...)
这样可以吗,还是我错过了一些不起作用的特殊情况?
这样可以吗,还是我错过了一些不起作用的特殊情况?
您的代码可以工作,但它增加了无用的开销。promise比回调消耗更多的内存,并且比回调慢。
我会写这样的东西
const { promisify } = require('util')
function mySuperFunctionCallback (data, cb) {
setTimeout(() => {
if (Math.random() >= 0.5) {
cb(Date.now())
} else {
cb(new Error('Not today...'))
}
}, 100)
}
const mySuperFunctionAsync = promisify(mySuperFunctionCallback)
function mySuperFunction (data, cb) {
if (cb) {
mySuperFunctionCallback(data, cb)
} else {
return mySuperFunctionAsync(data)
}
}
mySuperFunction().then((time) => {
console.log(time)
}).catch((err) => {
console.log(err)
})
mySuperFunction(null, (err, time) => {
console.log(err, time)
})
我试图理解一个API参考描述,但我很难理解它的含义: http://mongodb.github.io/node-mongodb-native/2.2/api/Cursor.html#toArray 上面写着 'toArray(回调)- 我知道回调相当于一个“块”,但有一个指向“promise”的箭头符号意味着什么?
知识点 理解 Promise 概念,为什么需要 promise 学习 q 的 API,利用 q 来替代回调函数(https://github.com/kriskowal/q ) 课程内容 第五课(https://github.com/alsotang/node-lessons/tree/master/lesson5 )讲述了如何使用 async 来控制并发。async 的本质是一个流程控制。其实在
问题内容: 假设我有这段代码 我想知道的是该函数是否将异步执行。 问题答案: 设完成为Call(执行者,未定义,«resolvingFunctions。[[Resolve]],resolvingFunctions。[[Reject]]»)。 如果完成是突然完成,则 令status为Call(resolvevingFunctions。[[Reject]],undefined,«completion。
在上一个小节的学习中,我们了解了 Mixins 作为一个函数时传入参数的使用方法,这个小节我们来介绍下具体介绍下混合函数,以及如何通过 Mixins 传入参数并返回参数。 1. 什么是混合函数? Return variables or mixins from mixins 。——官方定义 慕课解释: Mixins 可以作为一个函数使用返回参数或者一个新的 Mixins 。 在混合函数,返回的参数可
我给出了一个模型以供确认: 下面是显示上述模式的代码。 下面是我如何使用它...(例如在任何视图中) 现在,问题是:如果我调用confirm,它显示模态。但是如果我单击Cancel,然后再次调用confirm(确认),这一次,我点击OK:函数(上面代码段中的第二个参数)被调用两次。如果我点击取消10次,上面的函数调用10次。 知道为什么会这样吗? 谢谢.
问题内容: 如果从调用, 则会 收到消息 “套接字已连接” ,但未调用。我在这里想念什么? 问题答案: 在AngularJS中,承诺结果在$ digest周期内异步传播。因此,仅在进入$ digest循环时才调用在then()中注册的回调函数。 因此,当您的套接字连接时,我们处于摘要周期。 创建一个新的Promise,但是直到下一个摘要周期(永远不会到来的摘要周期)之前,它的结果才会传播(因为没有