文档章节

一个一步操作的困扰 javascript

delicacyfu
 delicacyfu
发布于 2014/06/06 16:33
字数 876
阅读 15
收藏 0
点赞 0
评论 0

异步编程的优点小弟就不再这里给大家赘述,相信大家都很熟悉;但是目前小弟遇到了一件非常棘手的问题,正是异步编程给小弟带来的困扰,废话不多说,先贴代码。。。

       ps:小弟也是一个代码杀手很多东西不太熟,这是一个纯js项目,项目对小弟js、jquery作了一回恶补啊。。。。 


 

/*
* 修改名称
*/
function changeItemName() {
    var waitChange = $("li:visible:has(:checkbox[name=itemCheck]:checked)", _itemContentList).toArray();
    
    //加载遮罩层
    var task = new Task(null, 1, "修改中");
    if (waitChange.length > 0) {
        var changeWay = $("#item_nameAddWay").val();
        var addStr = $("#item_nameStr").val() || "";
        var replaceStr = $("#item_nameAddStr").val() || "";
        //判断是否输入调整的内容
        if (changeWay != "productName" && addStr == "") {
            task.done();
            alert("您还没有输入需要调整的内容!");
            return;
        }
        
        var numIids = "";
        $.each(waitChange, function(i, li) {
            var name = $("[name=item_title]", li).text();
            if (changeWay == "replace") {
                $("[name=item_hiddenTitle]", li).text(name.replace(addStr, replaceStr));
            } else if (changeWay == "delete") {
                $("[name=item_hiddenTitle]", li).text(name.replace(addStr, ""));
            } else if (changeWay == "addpre") {
                $("[name=item_hiddenTitle]", li).text(addStr + name);
            } else if (changeWay == "addend") {
                $("[name=item_hiddenTitle]", li).text(name + addStr);
            } else {
                numIids += "," + $(":checkbox", li).val();
            }
        });
        
        var success = 0, failed = 0;
        //调用taobao.fenxiao.distributor.products.get,只能查询到分销商品
        if (changeWay == "productName") {
            getProductName(numIids, function() {
                chanegeName(waitChange.shift());
            });
        } else {
            chanegeName(waitChange.shift());
        }
        
        //修改名称
        function chanegeName(li) {
            $(li).css("background-color", "white").attr("onclick", null);
            var newName = $("[name=item_hiddenTitle]", li).text();
            if ($("[name=item_title]", li).text() == newName) {
                success++;
            } else if (getLengthInBytes(newName) > 60) {
                failed++;
                $(li).css("background-color", "pink").attr("onclick", "alert('超过淘宝名称长度限制!')");
            } else {
                update(function() {
                    alert(success);
                });
            }
            
            if (waitChange.length > 0) {
                chanegeName(waitChange.shift());
            } else {
                task.done();
                if (failed > 0) {
                    alert("成功:" + success + ";失败:" + failed + "(请点击红色行,查看失败原因!)");
                } else {
                    alert("恭喜您,商品已全部改名成功!");
}
            }
            
            //这是淘宝的一个异步调用函数
            function update(callback) {
                var taobaoInvoke = system.api({
                    "method": "taobao.item.update",
                    "num_iid": $(":checkbox", li).val(),
                    "title": newName
                });
                taobaoInvoke(function(data) {
                    try {
                        if (data.error_response) {
                            failed++;
                            $(li).css("background-color", "pink").attr("onclick", "alert('" + getErrorMsg(data.error_response) + "')");
                            sendError("taobao.item.update :chanegeName(li) Error:" + getErrorMsg(data.error_response));
                        } else if (data.item_update_response.item.modified != "") {
                            success++;
                            $("[name=item_title]", li).text(newName);
                        } else {
                            failed++;
                            $(li).css("background-color", "pink").attr("onclick", "alert('" + JSON.stringify(data) + "')");
                        }
                    } catch (e) {
                        failed++;
                        $(li).css("background-color", "pink").attr("onclick", "alert('非常抱歉,系统遇到错误,请提醒我们处理!')");
                        sendError("taobao.item.update :chanegeName(li) Exception:" + e);
                    } finally {
                            callback();
                    }
                });
            }
        }
    } else {
        task.done();
        alert("您还没有选择需要改名的商品!");
        return;
    }
}

//调用接口查询名称
function getProductName(numIids, callback) {
    var taobaoInvoke = system.api({
        "method": "taobao.fenxiao.distributor.products.get",
        "fields": "name,query_item_id",
        "item_ids": numIids
    });
    taobaoInvoke(function(data) {
        try {
            if (data.error_response) {
                alert("获取产品标题出错:" + getErrorMsg(data.error_response));
                sendError("taobao.fenxiao.distributor.products.get :getProductName(numIids) error:" + getErrorMsg(data.error_response));
            } else if (data.fenxiao_distributor_products_get_response.products) {
                var products = data.fenxiao_distributor_products_get_response.products.fenxiao_product;
                if (products == "undefind") {
                    task.done();
                    alert("恭喜您,商品已全部改名成功!");
                    return;
                } else {
                    $.each(products, function(i, product) {
                        var li = $("li:visible:has(:checkbox[name=itemCheck][value=" + product.query_item_id + "])", _itemContentList);
                        $("[name=item_hiddenTitle]", li).text(product.name);
                    });
                    callback();
                }
            } else {
                alert("查询产品名称出错!");
            }
         } catch (e) {
            task.done();
            alert("非常抱歉,系统遇到错误,请提醒我们处理!");
            sendError("taobao.fenxiao.distributor.products.get :getProductName(numIids)  Exception:" + e);
        }
    });
}

简化下就是*****************************************************
function changeItemsName(){
    var success, failed = 0;
    var waitChangeLi = {.......};
    
    function changeName(li){
        if (判断) {
            success++;
        } else if (判断2) {
            failed++;
        } else {
            //一步执行的函数
            taobaoInvoke(function(){
                if (判断3)  {
                    success;
               } else {
                   failed++;
               }
            });
        }
        
        if (waitChangeLi.length > 0){
             changeName(waitChangeLi.shift());
        } else {
            alert("success:" + success +"  failed:" + failed); 
       }
    }   
}


这上面的代码 这段代码的问题产生于 异步函数为淘宝提供,小弟只有调用的份(大神的世界小弟不敢动。。。。),现在小弟想在递归 changName函数执行完成后 执行alert(success,failed)。but 异步的可恶造成了小弟的alert 不准。。求大神该觉小弟的代码。。。

© 著作权归作者所有

共有 人打赏支持
delicacyfu
粉丝 0
博文 3
码字总数 1014
作品 0
深圳
程序员
Javascript 中的上下文

js 中的 上下文 Context,可以说是一个,你即使不知道,没听过,也不影响你继续写 js 代码的一个概念。但是,它又确确实实是无所不在的一个东西,是的,无所不在。 从我自己的经验来看,对上...

五大三粗
2015/05/10
0
0
一行能装逼的JavaScript代码的延伸

前段就是坑,入坑水真深。 先看看一个黑科技, 纳尼,这是什么东西。 贴入浏览器执行一看,你个XX,你给老子等着。。。。。。。 然并卵。 作为一般的青年就此笑过, 可是我不是一般的青年,我...

淡色的云
05/30
0
0
React Native 从入门到原理

React Native 是最近非常火的一个话题,介绍如何利用 React Native 进行开发的文章和书籍多如牛毛,但面向入门水平并介绍它工作原理的文章却寥寥无几。 本文分为两个部分:上半部分用通俗的语...

guozhendan
06/26
0
0
由浅入深JavaScript——JavaScript的诞生背景

JavaScript的诞生背景 在上世纪90年代,欧美各国的web程序日益流行,但是当时用户上网还都在使用电话拨号上网,通过 调制解调器,网速仅仅只有28kb/s。而web程序的展现却日渐丰富。当时在没有...

奇葩界张三
06/29
0
0
从一行代码里面学点JavaScript

从一行代码里面学点JavaScript (转载自这里) 现如今,JavaScript无处不在,因此关于JavaScript的新知识也是层出不穷。JavaScript的特点在于,要学习它的语法入门简简单,但是要精通使用它的方...

L3ve
2014/10/14
0
0
使用Highcharts制作简单图表

今天我们要使用JavaScript图表Highcharts制作简单的柱形图,我们已经安装好Highcharts,让我们开始制作图表吧。 步骤一 在网页中添加一个div。设置id,设置图表长、高。代码如下: <div id=...

咲晚杍
2013/12/04
0
0
深入浅出 ES6-Generator

深入浅出 ES6-Generator 先不谈概念、定义,我们从实际用例切入。 功能需求 我们现在要做的,是一个基于nodejs+mongoDB的web应用,其中需要一个web页面,显示用户的列表。就这样,需求就这么...

fengwenjie
2015/07/21
0
1
undefined与null的区别

大多数计算机语言,有且仅有一个表示"无"的值,比如,C语言的NULL,Java语言的null,Python语言的none,Ruby语言的nil。 有点奇怪的是,JavaScript语言居然有两个表示"无"的值:undefined和n...

ihaolin
2014/03/30
0
0
《Node.js开发指南》书评汇总

刚查了下库存,发现订阅《Node.js开发指南》的读者大增,这是为什么呢?看了下近期本书在豆瓣的评论,口碑很好,现将豆瓣的书评汇总如下: ----------------------------------------------...

生气的散人
2012/10/15
0
0
iOS下JS与OC互相调用(六)--WKWebView + WebViewJavascriptBridge

iOS下JS与OC互相调用(六)--WKWebView + WebViewJavascriptBridge 转载:原地址 https://www.jianshu.com/p/e951af9e5e74 上一篇文章介绍了UIWebView 如何通过WebViewJavascriptBridge 来实现......

法斗斗
05/11
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

IntelliJ IDEA 详细图解最常用的配置,适合刚刚用的新人。

刚刚使用IntelliJ IDEA 编辑器的时候,会有很多设置,会方便以后的开发,磨刀不误砍柴工。 比如:设置文件字体大小,代码自动完成提示,版本管理,本地代码历史,自动导入包,修改注释,修改...

kim_o
19分钟前
0
0
Google Java编程风格指南

目录 前言 源文件基础 源文件结构 格式 命名约定 编程实践 Javadoc 后记 前言 这份文档是Google Java编程风格规范的完整定义。当且仅当一个Java源文件符合此文档中的规则, 我们才认为它符合...

niithub
21分钟前
0
0
java.net.MalformedURLException异常说明

1.异常片段 Java代码中,在进行URL url = new URL(urllink)操作时,提示以下异常信息,该类异常主要问题出在参数urllink上面。 异常片段1 java.net.MalformedURLException at java.ne...

lqlm
21分钟前
0
0
CentOS7修改mysql5.6字符集

解决办法:CentOS7下修改MySQL数据库字符编码为UTF-8,UTF-8包含全世界所有国家所需要的字符集,是国际编码。 具体操作如下: 1.进入MySQL [root@tianqi-01 ~]# mysql -uroot -p Enter passw...

河图再现
23分钟前
0
0
DevExpress v18.1新版亮点——WPF篇(一)

用户界面套包DevExpress v18.1日前终于正式发布,本站将以连载的形式为大家介绍各版本新增内容。本文将介绍了DevExpress WPF v18.1 的新功能,快来下载试用新版本!点击下载>> Accordion Co...

Miss_Hello_World
25分钟前
0
0
Rancher 2.0集群与工作负载告警

Rancher 2.0操作指南。本文将step by step演示如何使用Rancher 2.0中集成的告警功能,包括设置通知程序、设置集群级别以及工作负载级别的告警。 在Rancher 1.x时期,告警功能是很多Rancher用...

RancherLabs
30分钟前
1
0
Python中字符串拼接的N中方法

python拼接字符串一般有以下几种方法: ①直接通过(+)操作符拼接 s = 'Hello'+' '+'World'+'!'print(s) 输出结果:Hello World! 使用这种方式进行字符串连接的操作效率低下,因为python中...

木头释然
31分钟前
9
0
JAVA排序之归并排序

归并排序思路就是不停拆分数组,直到拆成一个一个元素,之后将拆出来的元素按照拆分顺序反过来的顺序合并,出现前边值大于后边值,则换位置,放入临时数组,最后将临时数组覆盖原数组. public stat...

勤奋的蚂蚁
43分钟前
1
0
想要年薪20万,先看会不会这28个企业运维岗经典面试题

1、Linux如何挂载windows下的共享目录? mount.cifs //IP地址/server /mnt/server -o user=administrator,password=123456 linux 下的server需要自己手动建一个 后面的user与pass 是windows...

Py爱好
48分钟前
0
0
python的url分配

from django.conf.urls import url,include urlpatterns=[ url('xinwen/',include('xinwen.urls')) ] from django.urls import path from xinwen import views urlpatterns = [ path('login/......

南桥北木
51分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部