gue*_*314 11 javascript promise
给定用于处理Promise值的命名函数
function handlePromise(data) {
// do stuff with `data`
return data
}
Run Code Online (Sandbox Code Playgroud)
a)传递命名函数handlePromise作为参考.then()
promise.then(handlePromise)
Run Code Online (Sandbox Code Playgroud)
b)使用匿名或命名函数作为参数.then()并返回指定函数,handlePromise并将Promise值作为参数传递给传递给匿名或命名函数的主体.then()
promise.then(function /*[functionName]*/(data) {return handlePromise(data)})
Run Code Online (Sandbox Code Playgroud)
问题
模式a)和b)之间是否存在差异?
如果对1.的答案是肯定的,那么在使用任何一种模式时应该考虑哪些差异?
可以创建一个在没有参数传递时存在差异的情况,但它是一个拉伸,通常你应该传递f而不是function(x) { return f(x); }或x => f(x)因为它更干净.
这是一个导致差异的示例,基本原理是带参数的函数可能会导致这些参数产生副作用:
function f() {
if(arguments.length === 0) console.log("win");
else console.log("Hello World");
}
const delay = ms => new Promise(r => setTimeout(r, ms)); // just a delay
delay(500).then(f); // logs "Hello World";
delay(500).then(() => f()) // logs "win"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
293 次 |
| 最近记录: |