这个JavaScript函数需要返回Promise吗
Does this JavaScript function need to return a Promise?
假设我有一些JS可以进行如下AJAX调用:
$.getJSON(myUrl, { targetState: state }, function (jsonData) {
}).success(function (jsonData) {
...
...
...
});
现在,让我们假设我想将此代码封装在一个函数中,并让它在成功块中返回一些值,这样我就可以在应用程序的各个位置调用它。我创建的函数应该返回Promise吗?我想可能是这样,但我从未创建过返回Promise的JS函数,所以我不完全确定什么时候需要这样做。
我创建的函数是否应该返回Promise
是的。如果您想使用promise,执行任何异步操作的每个函数都应该为其结果返回promise。没有例外,真的。
将此代码封装在一个函数中,并让它在成功块中返回一些值
好消息:这并不复杂,因为$.getJSON
已经给了你一个合作的承诺。现在,您所需要做的就是使用then
方法——您可以传递一个回调来处理结果,并为回调的返回值返回一个新的promise。你只需要用then
替换你的success
,并添加一些return
s:
function target(state) {
var myUrl = …;
return $.getJSON(myUrl, { targetState: state })
// ^^^^^^
.then(function (jsonData) {
// ^^^^
/* Do something with jsonData */
return …;
// ^^^^^^
});
}
有了promise,就不再向$.getJSON
函数传递回调了。
这样我就可以在我的应用程序中从不同的地方调用它
现在,您可以调用target
函数,并在另一个回调中获得返回promise的结果:
target({…}).then(function(result) {
…; return …;
});
相关文章:
- 在promise完成后,依次运行返回promise的函数
- 等待's返回Promise而不是value
- 当数组中的某个函数没有返回promise时,我可以使用$q.all吗
- 可以为云端点打开.client.load返回promise
- 使用从内部函数返回的异步数据对外部函数返回promise
- 在Angular服务中使用$http时,为什么要返回promise和数据
- 从自定义函数返回promise
- Leadfoot会话对象返回promise
- For循环以错误的顺序返回promise
- 返回promise而不是jquery ajax调用
- 当异步验证器在AngularJS中返回promise时提交表单
- 函数返回Promise,检查错误
- 在jQuery中返回promise()或deferred有什么区别
- 在 JavaScript 中,当 'parent()' 返回 Promise 时,如何实现递归的 'ancestors(
- Angular$q返回promise两次$http服务调用
- 对返回promise的函数使用.success时,Undefined不是函数
- 返回promise的链接函数;刷新超时后无法解析
- Angular Service在返回promise时抛出异常
- 模拟服务返回promise:无法读取未定义的属性
- 这个JavaScript函数需要返回Promise吗