我有一个函数loadItems(),它加载一些异步的东西,然后失败或成功。“失败”和“成功”回调都必须在库中执行,然后将其传递给实现者,后者可以选择实现失败,或者成功,或者两者都不能实现。
我现在遇到的问题是,如果库同时实现了成功和失败处理程序,那么它总是会返回一个新的承诺,即决心成功。
这就是我所拥有的:
// The library:
function loadItems() {
return store.get('todo').then(function(rsp) {
// Save these locally
items = rs
假设我有一个可以运行普通函数的页面加载程序,或者一个jquery请求。如果AJAX请求成功(即done),我只想转移到下一步,如果没有成功,则显示错误(即fail)。
function runStep(stepText, functionToCall){
this.setStepText(stepText);
// call function
let result = functionToCall();
// if the function is jquery, wait for the result
if(result && typeof res
我使用的是nodejs和库诺言/A+(选择了这个,因为它似乎是最流行的) 。我面临的问题是,尽管异步函数正在按其应有的方式完成,但它是在failure语句之后完成的。因此,sv + ' No it failed'总是在异步方法中的console.log消息(这表明它成功)之前打印出来的。这个console.log消息应该在异步方法内部打印出来。我被困住了为什么会这样?承诺总是在失败时运行,即使异步方法已经成功返回?
我的守则:
var promise = new Promise(function (resolve, reject) {
var u = asy
我正在尝试使用Forecast.io天气API来构建一个使用Ionic的天气应用程序。我很难将AJAX响应数据交付给我的控制器,以便在我的视图中使用。
我的工厂服务:
.factory('WeatherService', function($cordovaGeolocation) {
var posOptions = { timeout: 10000, enableHighAccuracy: false };
return {
// Get current Geolocation position with the configured /posOption
因此,如下面的代码所示,它只处理ajax调用成功的情况,如果ajax调用失败,它将被忽略,deferred.reject()将永远不会被调用。因此,如果我们遇到失败的情况,会不会永远保留jQuery中的事件侦听器以导致内存泄漏?
$.when(loadSomething).done(function() {
// ...
});
function loadSomething() {
var deferred = $.Deferred();
// Only deal with the success case,
// If the ajax call fail
对于jQuery函数,使用.success()的原因是什么?最初的函数将在成功时执行,对吗?所以,当您包含.success()时,不是只执行了两次吗?
$.getJSON( "ajax/test.json", function( data ) {
//this will execute upon success
})
.success(function() {
//doesn't this do what the above is doing?
})
我正试图把我的注意力集中在jQuery延迟/承诺(使用v1.8+)上。
通过阅读文档,$.Deferred.then(...)方法接受一个doneFilter和一个failFilter作为要执行的参数,并且它返回一个承诺,我们可以用它来链接如下:
function doDefer() {
var $defer = $.Deferred();
doSomethingAsynchronous(
function () {
$defer.resolve();
},
function () {
我是相当新的反应,甚至更新的测试。
对于json数组,我有一个验证函数。输入包含数据和每个参数,指示验证是否应该失败。
describe('ValidatorFactory', () => {
it('should check data', () => {
let data = [{} ... ...];// data filled in from file.
for (let el of country.TestData) {
// Validate is defined elsewhere.
valid
我在我的节点js app中有一个for循环;在这个循环中,每次迭代都可以执行mysql查询(并不总是依赖);查询是异步的,我在成功回调中获得结果;但我需要for循环的每个迭代都等待回调完成(如果需要):
function calculate() {
var resArray = [];
//[...]
for (i = 0; i < tables.length; i++) {
if (id !== undefined) {
var queryString = ... //build query
我正在尝试执行一系列操作,这些操作有用户注销,然后使用Javascript中的解析将它们重定向到主页。以下是逻辑:
jQuery(document).ready(function() {
$("#logout").on("click", function (e) {
//logout current user
if ( Parse.User.current() ) {
Parse.User.logOut();
// check if really logged out
if (Pa
关于jQuery延迟对象的Pluralsight教程有这个例子,我已经在其中添加了一些console.log。它异步地将三个html文件加载到三个console.log中,如果成功,它会在屏幕上打印“工作!”--但是,div会打印“成功!”在实际处理完成之前将其发送到控制台。如果我将console.log放在代码的when部分,情况也是一样--在内容实际加载到屏幕之前,它会打印内容已完成加载。
那么,为什么DOM上的处理按预期进行(成功时),但console.log消息比成功更早地打印出来呢?
var loadSection = function (options) {
if (typ
我试图在Node.js中链接几个承诺,但我只习惯于使用jQuery承诺。我遇到的问题是我的高级函数(registerUser),当bcrypt哈希失败时,链接承诺似乎不会失败(进入catch处理程序)(我更改代码,将字符串设置为null作为测试)。
我想要实现的是
返回承诺并记录其自身故障的哈希函数。
返回承诺并记录其自身失败的插入函数。
一个寄存器函数,它调用哈希,然后调用插入,并记录失败。
这是我的密码。
hashPassword(password){
let self = this;
// if you set password to null, th
我有这个代码jQuery代码片段: $.get('/api/' + currentPage).done(function(data) { ... })
.fail(...) 我想用一个总是成功的promise替换$.get('/api/'+currentPage),并为data返回一个特定值。类似于: let myData = { ... } // value of data I want to pass to the done function
(new AlwaysSucceeds(myData)
我有下面的示例代码,它使用了jQuery延迟。我似乎不能理解的是,尽管brushTeeth函数返回了一个被拒绝的promise,但为什么总是要解析另一个被延迟的collectionResults。
一些jQuery延迟读取表明,如果在$.when中传递的函数不是promise,它们将立即被解析,但brushTeeth实际上返回promise。
我在这里做错了什么?
ShowerModule = ( function($) {
function init(){
var result = $.Deferred(