我看到的代码是这样的:
myObj.doSome("task").then(function(env) {
// logic
});
那么()从何而来?
我看到的代码是这样的:
myObj.doSome("task").then(function(env) {
// logic
});
那么()从何而来?
当前回答
then()函数与一些库或框架(如jQuery或AngularJS)中使用的“Javascript承诺”相关。
promise是一种处理异步操作的模式。该承诺允许您调用一个名为“then”的方法,该方法允许您指定作为回调函数使用的函数。
欲了解更多信息,请参阅:http://wildermuth.com/2013/8/3/JavaScript_Promises
对于Angular的承诺:http://liamkaufman.com/blog/2013/09/09/using-angularjs-promises/
其他回答
这是关于在箭头函数中使用花括号{}的问题:
这3个例子做的是同样的事情(什么都没有,但是有有效的语法,并且是一个有效的Promise链!)
新承诺(函数(ok) { ok ( /* myFunc1(param1, param2, ..) */ ) })(函数(){ /* myFunc1成功*/ /*启动其他内容*/ /* console.log(whateverparam1) */ /* myFunc2(whateverparam1, otherparam, ..) */ })(函数(){ /* myFunc2 succeed */ /*启动其他内容*/ /* myFunc3(whatever38, ..) */ }) console.log(“这段代码没有错误GG!”)
相同的逻辑使用箭头函数省略{}
new Promise((ok) => ok( /* myFunc1(param1, param2, ..) */ ).then(() => 0 // HEY DID YOU NOTICE! A number that does nothing, // but otherwise the parsing will fail! // The code is pretty clean but have a major downside // As arrow functions without {} can contains only one declaration // console.log("something") will FAIL here ).then(() => "" // HEY DID YOU NOTICE! An empty string that does nothing, // but otherwise the parsing will fail! // As arrow functions without {} can contains only one declaration // We can't add more code here, hence: // console.log("something") // Will break the whole promise // This is likely the error in y(our) code ;) )) console.log("This code has no errors GG!")
带有{}的箭头函数
新承诺((ok) => { ok ( /* myFunc1(param1, param2, ..) */ ) })。那么(()=> { /* myFunc1成功*/ /*启动其他内容*/ })。那么(()=> { /* myFunc2 succeed */ /*启动其他内容*/ /* myFunc3(whatever38, ..) */ console.log(“什么”) /*更多控制台日志!* / console.log(“其他东西”) }) console.log(“这段代码没有错误GG!”)
.然后在async函数中返回一个promise。
好的例子是:
var doSome = new Promise(function(resolve, reject){
resolve('I am doing something');
});
doSome.then(function(value){
console.log(value);
});
要向它添加另一个逻辑,您还可以添加reject('I am the rejected param')调用函数和console.log。
这是一个小的JS_Fiddle。
然后是一个方法回调堆栈,在承诺被解决后可用,它是库的一部分,如jQuery,但现在在原生JavaScript中可用,下面是它如何工作的详细解释
你可以在原生JavaScript中做一个承诺:就像在jQuery中有承诺一样,每个承诺都可以堆叠,然后可以用Resolve和Reject回调调用,这就是你如何链式异步调用。
我从MSDN文档中分叉和编辑电池充电状态。
这是试图找出用户的笔记本电脑或设备是否正在充电电池。然后是叫你和你的工作成功后。
navigator
.getBattery()
.then(function(battery) {
var charging = battery.charging;
alert(charging);
})
.then(function(){alert("YeoMan : SINGH is King !!");});
另一个es6例子
function fetchAsync (url, timeout, onData, onError) {
…
}
let fetchPromised = (url, timeout) => {
return new Promise((resolve, reject) => {
fetchAsync(url, timeout, resolve, reject)
})
}
Promise.all([
fetchPromised("http://backend/foo.txt", 500),
fetchPromised("http://backend/bar.txt", 500),
fetchPromised("http://backend/baz.txt", 500)
]).then((data) => {
let [ foo, bar, baz ] = data
console.log(`success: foo=${foo} bar=${bar} baz=${baz}`)
}, (err) => {
console.log(`error: ${err}`)
})
then是一个用于解决异步回调的方法 这是在ES6中引入的 请在这里找到适当的文件Es6承诺
我猜doSome会返回这个,也就是myObj,它也有then方法。标准方法链接…
如果doSome不返回this,作为doSome执行的对象,请放心,它将返回具有then方法的某个对象…
正如@patrick指出的,标准js中没有then()
then()函数与一些库或框架(如jQuery或AngularJS)中使用的“Javascript承诺”相关。
promise是一种处理异步操作的模式。该承诺允许您调用一个名为“then”的方法,该方法允许您指定作为回调函数使用的函数。
欲了解更多信息,请参阅:http://wildermuth.com/2013/8/3/JavaScript_Promises
对于Angular的承诺:http://liamkaufman.com/blog/2013/09/09/using-angularjs-promises/