Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
Ϊ´¿ OpenWhisk ²Ù×÷´´½¨µ¥Ôª²âÊÔ
 
  2084  次浏览      28
 2018-4-18 
 

 

±à¼­ÍƼö:

±¾ÎÄÀ´×ÔÓÚIBM£¬ÔÚ±¾ÎÄÖУ¬½«Ñ§Ï°ÈçºÎ°ë×Ô¶¯µØ´´½¨µ¥Ôª²âÊÔ£¬ÒÔ¼°ÈçºÎÔËÐÐÕâЩ²âÊÔÀ´ÑéÖ¤´úÂë¸ü¸ÄûÓÐÔì³ÉÈÎºÎÆÆ»µ¡£

OpenWhisk Ó¦ÓóÌÐòµÄÄ£¿é»¯ÐÔÖÊ£¬Ê¹µÃΪ´¿º¯Êýʽ ¡ª ÕâÒâζ×ÅûÓÐÈκθ±×÷Óã¬Ò²²»ÒÀÀµÓÚÍⲿ״̬µÄ²Ù×÷´´½¨µ¥Ôª²âÊÔ±äµÃºÜÈÝÒס£ÔÚ±¾½Ì³ÌÖУ¬½«Ñ§Ï°ÈçºÎ°ë×Ô¶¯µØ´´½¨µ¥Ôª²âÊÔ£¬ÒÔ¼°ÈçºÎÔËÐÐÕâЩ²âÊÔÀ´ÑéÖ¤´úÂë¸ü¸ÄûÓÐÔì³ÉÈÎºÎÆÆ»µ¡£

´¿º¯ÊýÊÇÂú×ãÒÔÏÂÁ½¸öÌõ¼þµÄº¯Êý£º

1.º¯ÊýµÄ½á¹û½öÒÀÀµÓÚÊäÈë²ÎÊý¡£ÈκÎʱºòʹÓÃÏàͬµÄÊäÈë²ÎÊýµ÷Óøú¯Êý£¬¶¼»á²úÉúÏàͬµÄ½á¹û¡£

2.¸Ãº¯ÊýûÓÐÈκθ±×÷Óã»»ñµÃ·µ»ØÖµÊÇÔËÐиú¯ÊýµÄΨһЧ¹û¡£

ʹÓÃÖîÈç OpenWhisk Ö®ÀàµÄº¯Êý¼´·þÎñ (FaaS) ¿ò¼Üʱ£¬¶ÔÓÚÈκÎ×÷Ϊ´¿º¯ÊýµÄ²Ù×÷£¬¶¼¿ÉÒÔʹÓÃÄúÔÚ±¾ÎÄÖÐѧµ½µÄ·½·¨À´Ó¦ÓÃ×Ô¶¯ QA¡£

¹¹½¨ÄúµÄÓ¦ÓóÌÐòÐèÒª×öµÄ×¼±¸¹¤×÷

OpenWhisk ºÍ JavaScript µÄ»ù±¾ÖªÊ¶

Ò»¸öÃâ·Ñ IBM Cloud ÕÊ»§

ÔËÐÐÓ¦ÓóÌÐò»ñÈ¡´úÂë

µ¥Ôª²âÊÔ

Ò»¸öʵÓõÄÓ¦ÓóÌÐò¿ÉÄÜÓɶà¸öÄ£¿é×é³É£¬Ã¿¸öÄ£¿é¶¼Ö´ÐÐÒ»¸öÌØ¶¨²Ù×÷¡£³ýÁ˶ÔÓ¦ÓóÌÐò½øÐÐÕûÌå²âÊÔÖ®Í⣬µ¥¶À²âÊÔÿ¸öÄ£¿éÒ²ºÜÓÐÓá£ÕâÖÖ²âÊÔÀàÐͳÆÎªµ¥Ôª²âÊÔ£¬¸Ã²âÊÔʹÄúÄܹ»Ê¶±ð bug µÄλÖ㬲¢Ïà¶ÔÈÝÒ×µØÐÞ¸´ËüÃÇ¡£

µ¥Ôª²âÊÔµÄÒ»¸öÌôÕ½ÊÇ£¬ÄúÐèҪʶ±ðÿ¸öÄ£¿éµÄ¿ÉÄÜÊäÈëºÍÓëÆäÆ¥ÅäµÄÊä³ö¡£Èç¹ûÄ£¿éºÜ¼òµ¥£¬´Ë¹ý³Ì¿ÉÄܺÜÈÝÒ× ¡ª µ«ÊÇÄ£¿éÔ½¸´ÔÓ£¬´Ë¹ý³Ì¿ÉÄÜÔ½À§ÄÑ¡£¶ÔÓÚÉî¶ÈǶÈëÔÚÓ¦ÓóÌÐòÖÐÇÒÈËÀ಻¿É¶ÁµÄÊäÈë»òÊä³öµÄÄ£¿é£¬ÓÈÆäÈç´Ë¡£

¶ÔÓڳ䵱´¿º¯ÊýµÄ²Ù×÷£¬¿ÉÒÔÔÚʹÓÃÓ¦ÓóÌÐòʱͨ¹ý²é¿´ÈçºÎµ÷ÓÃÊäÈëºÍÊä³ö£¬À´×Ô¶¯Ê¶±ðÕâЩÊäÈëºÍÊä³ö¡£È»ºó£¬µ±³ÌÐòÔ±¸ü¸ÄÄ£¿éʱ£¬Äú¿ÉÒÔʹÓÃÏàͬµÄÊäÈëÖØÐÂÔËÐÐËü£¬ÒԲ鿴¸ü¸ÄÊÇ·ñÔì³ÉÁËÈÎºÎÆÆ»µ¡£

Ñù±¾Ó¦ÓóÌÐò

±¾½Ì³ÌµÄÄ¿µÄÊÇչʾ QA ¼¼Êõ£¬ËùÒÔÑù±¾Ó¦ÓóÌÐò·Ç³£¼òµ¥£ºÒ»¸ö´ÊµäÓ¦ÓóÌÐò£¬ÔÊÐíÓû§Ñ¡ÔñÒ»¸öÓ¢Îĵ¥´Ê£¬È»ºóÌṩÆäËûÓïÑԵĵÈЧ´Ê»ã¡£

´´½¨Ó¦ÓóÌÐòÐòÁÐ

ÒªÁ˽âÈçºÎÔÚ OpenWhisk Öбàдһ¸öÃæÏòÓû§µÄÓ¦ÓóÌÐò£¬ÇëÔĶÁÎҵĽ̡̳°ÎªÒ»¸öÁªÍø»·¾³¹¹½¨Ò»¸öÖÇÄÜËø¡±£¨µÚ 1¡¢2 ºÍ 5 С½Ú£©¡£Óë¸ÃÓ¦ÓóÌÐò¶ÔÓ¦£¬±¾½Ì³ÌÖеÄÓ¦ÓóÌÐòÓÉ 3 ¸ö²Ù×÷×é³É£º

1.getTranslation

2.translation2tables

3.tables2html

Äú½«ÔÚ OpenWhisk Öд´½¨ËùÓÐÕâ 3 ¸ö²Ù×÷£¬ËüÃÇͨ³£ÊÇ´¿²Ù×÷£¬µ«Êǵ± getTranslation ÔÚ error ²ÎÊýÖлñµÃÁËÒ»¸öֵʱ£¬Ëü¿ÉÄܱäµÃ²»´¿¡£

´´½¨ÕâЩ²Ù×÷ºó£¬°´ÒÔÏ·½Ê½½«ËüÃÇ×éºÏµ½Ò»¸öÐòÁÐÖУ¬²¢ÈøÃÐòÁпɴÓä¯ÀÀÆ÷·ÃÎÊ£º

1.µ¥»÷×ó²à±ßÀ¸ÖÐµÄ Develop¡£

2.ÔÚ MY ACTIONS Ï£¬Ñ¡ÔñÐòÁÐÖеĵÚÒ»¸ö²Ù×÷ getTranslation¡£

3.µ¥»÷ Link into a Sequence¡£

4.µ¥»÷ MY ACTIONS ´ÅÌù£¬Ñ¡ÔñµÚ¶þ¸ö²Ù×÷ translation2tables£¬È»ºóµ¥»÷ Add to Sequence¡£

5.µ¥»÷ Extend£¬²¢Öظ´ÉÏÒ»²½À´Ìí¼ÓµÚÈý¸ö²Ù×÷£¨Ò²ÊÇ×îºóÒ»¸ö²Ù×÷£©tables2html¡£

6.µ¥»÷ This Looks Good¡£

½«ÐÂÐòÁÐÃüÃûΪ UnitTestsApp¡£µ¥»÷ Save Action Sequence£¬È»ºóµ¥»÷ Done¡£

¸ÃÐòÁÐÓ¦¸ÃÀàËÆÓÚÏÂͼ£º

ͼ 1. Ó¦ÓóÌÐòÐòÁÐ

 

Ó¦ÓóÌÐòÐòÁÐ

ÈøÃÐòÁпɴӻ¥ÁªÍø·ÃÎÊ

Ö´ÐÐÒÔϲ½ÖèÈøÃÐòÁпɴӻ¥ÁªÍø·ÃÎÊ£º

1.µ¥»÷×ó²à±ßÀ¸ÖÐµÄ APIs¡£

2.µ¥»÷ Create Managed API¡£

3.½«¸Ã API ÃüÃûΪ UnitTestsApp¡£ÊäÈë»ù±¾Â·¾¶ /UnitTestsApp¡£

4.µ¥»÷ Create Operation£¬²¢Ê¹ÓÃÒÔϲÎÊý´´½¨Ò»¸ö²Ù×÷£º

5.ÏòϹö¶¯£¬È·±£Ñ¡ÔñÁË Enable CORS£¬²¢µ¥»÷ Save & expose¡£

6.¸´ÖƸ÷¾¶£¬½«ËüÕ³Ìùµ½ä¯ÀÀÆ÷´°¿ÚÖУ¬ÔÚĩβ´¦ÊäÈë /translate£¬²¢ä¯ÀÀµ½¸Ã URL£¨ÎÒµÄ URL Ϊ

7.È·±£ÔÚµ¥»÷Ó¦ÓóÌÐòÖеÄÀ¶É«°´Å¥Ê±£¬Äú»á»ñµÃÒëÎÄ¡£µ¥»÷Ó¦ÓóÌÐòÖеĺìÉ«°´Å¥Ê±£¬Äú¿ÉÄÜ»ñµÃÒëÎÄ»ò´íÎóÏûÏ¢¡£

ͼ 2. Ñù±¾ÒëÎÄ

²¶»ñ£¨ÊäÈë¡¢Êä³ö£©¶Ô

Òª´´½¨µ¥Ôª²âÊÔ£¬ÐèÒª»ñÈ¡ÊäÈëºÍÓëÆäÆ¥ÅäµÄÊä³ö¡£Îª´Ë£¬×î¼òµ¥µÄ·½·¨ÊDZ༭¸ÃÐòÁУ¬½«ÏÖÓвÙ×÷Ìæ»»ÎªÒ»¸ö°ü×°Æ÷£¬¸Ã°ü×°Æ÷»áµ÷ÓÃԭʼ²Ù×÷²¢´æ´¢ÆäÊäÈëºÍÊä³ö¡£

1.½«²Ù×÷Ìæ»»Îª°ü×°Æ÷

2.Òª½«²Ù×÷Ìæ»»Îª°ü×°Æ÷£¬Ê×ÏÈÐèÒªÄܹ»Ô¶³Ìµ÷ÓøòÙ×÷¡£¿ÉÒÔ½«ËüÌí¼Óµ½ API »òʹÆä³ÉΪһ¸ö Web ²Ù×÷£¬µ«Ê¹ÓÃÏÂÃæµÄ·½·¨¸üÈÝÒ׸ü°²È«£º

3.µ¥»÷×ó²à±ßÀ¸É쵀 Develop ²¢´ò¿ª²Ù×÷ (getTranslation)¡£

4.µ¥»÷ View REST Endpoint¡£

ÏòϹö¶¯µ½ cUrl ÃüÁî²¢µ¥»÷ Show Full Command¡£½«¸ÃÃüÁî¸´ÖÆµ½Îı¾ÎļþÖС£

5.ʹÓà base64 ½âÂëÆ÷£¨±ÈÈçÕâ¸ö½âÂëÆ÷£©½âÂëÑéÖ¤ÐÅÏ¢£¨Basic ºóÃæµÄ²¿·Ö£©£¬ÈçÏÂÃæµÄ²åͼËùʾ£¨¸ÃÖµÒѱàУ£©¡£Õâ¸öÖµÊÇÄúµÄ API ÃÜÔ¿¡£

ͼ 3. ÑéÖ¤ÐÅÏ¢

µã»÷²é¿´´óͼ

6.ʹÓôËÎļþµÄÄÚÈÝ´´½¨Ò»¸öÃûΪ callGetTranslation µÄвÙ×÷£¨È·±£ÔÚµÚ 4 ÐÐÉ쵀 api_key ºÍµÚ 11 ÐÐÉ쵀 name ÖзÅÈëÁËÄú×Ô¼ºµÄÖµ£©¡£

7.ÔËÐиòÙ×÷£¬¿ÉÒԹ۲쵽£¬ËüÔÚ¹¦ÄÜÉϵÈЧÓÚ getTranslation¡£

ÄÇôËüµÄ¹¤×÷Ô­ÀíÊÇʲô£¿

ÕâЩ´úÂëÐÐʹÓà OpenWhisk NPM ¿âÀ´¹¹ÔìÒ»¸öÓë·þÎñÆ÷µÄÁ¬½Ó¡£¸ÃÁ¬½ÓÐèÒªÖ÷»úÃûºÍ API ÃÜÔ¿£¨ÄúÐèÒªÌṩÕâЩÐÅÏ¢ ¡ª ÎÒûÓиæËßÄúÎÒµÄÐÅÏ¢£¬·ñÔòÄúÎÞÐèÎÒµÄÔÊÐí¾ÍÄÜÖ´ÐÐÎÒµÄËùÓÐ OpenWhisk ²Ù×÷£©¡£

´Ó¼ÆËã»ú½Ç¶È½²£¬µ÷ÓÃÁíÒ»¸ö OpenWhisk ²Ù×÷¿ÉÄÜÒª»¨ºÜ³¤Ê±¼ä£¬ËùÐèʱ¼äÉõÖÁ¿ÉÄܳ¤´ïÒ»Ã롣ΪÁ˱ÜÃâΪÕû¸ö¹ý³Ì¸¶·Ñ£¬ÄúÐèÒª´´½¨²¢·µ»ØÒ»¸ö Promise ¶ÔÏó¡£¶ÔÏó¹¹Ô캯ÊýÓÐÒ»¸ö²ÎÊý£¬ÄǾÍÊÇÄúΪÁË»ñµÃ½á¹û¶øÔËÐеĺ¯Êý¡£´Ëº¯Êý½ÓÊÕÁ½¸ö²ÎÊý ¡ª Ò»¸öÊÇÔڳɹ¦Ê±µ÷Óõĺ¯Êý£¬ÁíÒ»¸öÊÇÔÚʧ°Üʱµ÷Óõĺ¯Êý¡£

return new Promise((success, failure) => {

ÔÚµ÷Óà Promise º¯Êýʱ£¬Ëüµ÷Óà ow.actions.invoke À´ÔËÐÐԭʼ OpenWhisk ²Ù×÷¡£name ²ÎÊýÊÇԭʼ²Ù×÷µÄ·¾¶£¨ÄúÐèÒª½«ËüÌæ»»Îª×Ô¼ºµÄÖµ£©¡£Èç¹ûµ÷Óà invocation ʱûÓÐ×èÈû£¬½«»áÁ¢¼´·µ»ØÒ»¸ö ID£¬ÄúÉÔºó¿ÉÒÔʹÓøà ID À´²éѯ½á¹û ¡ª µ«¶ÔÓÚ±¾ÓÃÀý£¬×îºÃÔÚÄú»ñµÃ´ð°¸Ö®Ç°×èÈû¡£

var invocation = ow.actions.invoke({
name: '/developerWorks_Ori-Pomerantz-apps/unit-tests/getTranslation',
blocking: true,
params: params
});

invocation ±äÁ¿°üº¬Ò»¸ö Promise ¶ÔÏó¡£then ·½·¨½«»á»ñÈ¡ Promise ÄÚµ÷Óõĺ¯Êý£¬È»ºóʹÓýá¹ûÀ´µ÷ÓòÎÊýº¯Êý¡£

invocation.then((resVal) => {

´´½¨²¢¼Ç¼£¨ÎªÁËÏÔʾֵ£©Ò»¸ö°üº¬ÊäÈëºÍÊä³öµÄ±äÁ¿£º

var logMe = {
input: params,
output: resVal.response.result
};
console.log(logMe);

½«½á¹û·µ»Ø¸øµ÷ÓÃԭʼ Promise ¶ÔÏóµÄ OpenWhisk »ù´¡¼Ü¹¹¡£

success(resVal.response.result);
});
});
}

ÔÚͼ 4 ÖУ¬¿ÉÒÔ¿´µ½À´×ÔÁ½¸ö²»Í¬µ÷ÓõÄÈÕÖ¾£¬Ò»¸öµ÷ÓõÄÊäÈëÊǿյģ¬ÁíÒ»¸öµ÷ÓõÄÊäÈëÖаüº¬Ò»¸öµ¥´Ê¡£

ͼ 4. Á½¸öµ÷ÓÃÈÕÖ¾

½«£¨ÊäÈë¡¢Êä³ö£©¶ÔдÈë Cloudant

µ¥Ôª²âÊÔÊý¾ÝÒª±äµÃÓÐÓã¬ÐèÒª±£ÁôÔÚÒ»¸ö Cloudant Êý¾Ý¿âÖС£Ê×ÏÈ£¬°´ÕÕÕâÆªÎÄÕÂµÚ 4a С½ÚÖеĽéÉÜ£¬´´½¨ÕâÑùÒ»¸öÊý¾Ý¿â£¨ÃüÃûΪ expected£©£¨·þÎñµÄÃû³ÆÎ޹ؽôÒª£©¡£È»ºó½« callGetTranslation µÄ´úÂëÌæ»»ÎªÕâ¸öÎļþµÄÄÚÈÝ¡£Çë¼ÇµÃ¸ü¸ÄµÚ 4 ÐУ¨OpenWhisk API ÃÜÔ¿£©¡¢9-13 ÐУ¨Cloudant ƾ֤£©ºÍ 26 ÐУ¨²Ù×÷µÄ·¾¶£©ÖеÄÏà¹Ø²ÎÊý¡£

ÎÒ½öÔÚÕâÀï½âÊÍÒ»ÏÂÓëÊý¾Ý¿âÏà¹ØµÄеIJ¿·Ö¡£

Cloudant Êý¾Ý¿âÌõÄ¿£¨³ÆÎªÎĵµ£©¿ÉʹÓÃ×Ö·û´®½øÐзÃÎÊ¡£Äú½«Ê¹ÓõÄË÷ÒýÊÇÊäÈë²ÎÊý¡£

var dbKey = JSON.stringify(params);

ÔÚ½«Ò»¸öÌõĿдÈëÊý¾Ý¿â֮ǰ£¬Ó¦¸Ã¼ì²éÒ»ÏÂ֮ǰÊÇ·ñ¿´µ½¹ýÕâ¸öÊäÈë¡£

// Did we already see this input?
mydb.get(dbKey, (err, body) => {

Èç¹û³¢ÊÔ»ñµÃÒ»¸öÎĵµ²¢Ê§°Ü£¬Äú»á»ñµÃÒ»¸ö°üº¬×´Ì¬´úÂë 404 µÄ´íÎó¡£ÔÚÕâÖÖÇé¿öÏ£¬¿ÉÒÔ½«ÊäÈëֵдÈë¸ÃÊý¾Ý¿â£¬È»ºóµ÷Óûص÷º¯Êý¡£

// No, write it.
if (err != null && err.statusCode == 404) {
mydb.insert(
{"_id": JSON.stringify(params), data: logMe},
() => {
success(resVal.response.result);
}); // end of mydb.insert call
} // End of "this value has not been found"
else { // Assume value has been found, for the sake of simplicity

Èç¹û´ËÊäÈëÖµÒÑÔÚÊý¾Ý¿âÖУ¬¿ÉÒÔ½«µ±Ç°Êä³öÓëÊý¾Ý¿âÖеÄÊä³ö½øÐбȽϡ£Èç¹ûËüÃÇÊÇÏàͬµÄ£¬ÔòûÓÐÎÊÌâ¡£Èç¹ûËüÃÇÊDz»Í¬µÄ£¬Ôò´æÔÚÒ»¸öÎÊÌâ¡£¸Ã²Ù×÷ûÓÐ×÷Ϊһ¸ö´¿º¯ÊýÔËÐУ¬¿ÉÄÜÊÇÒòΪ´æÔÚÒ»¸ö bug£¬Ò²¿ÉÄÜÊÇÒòΪËüÒ»¿ªÊ¼¾Í²»ÊÇ´¿º¯Êý¡£

´ËÑù±¾´úÂë½ö½«ÎÊÌⱨ¸æ¸ø¿ØÖÆÌ¨¡£ÔÚ¸üÕæÊµµÄʵÏÖÖУ¬´úÂë»á½«ÎÊÌâ¼Ç¼µ½ÎÊÌâ¸ú×Ùϵͳ£¬ÓÃÓÚ¿ª·¢ºÍ QA¡£

// We found this before, but the output was different then
if (JSON.stringify(body.data) !== JSON.stringify(logMe)) {
console.log("This action isn't a pure function.");
console.log("For input:"+ JSON.stringify(params));
console.log("Old output:"+ JSON.stringify(body.data.output));
console.log("New output:"+ JSON.stringify(logMe.output));
}

ÎÞÂÛ²úÉúÆäËûÈκνá¹û£¬¶¼ÐèÒª·µ»ØÊä³öÖµ¡£

// Regardless, return the value.
success(resVal.response.result);
} // End of "this value has been found, not new"
}); // end of mydb.get call

ÓëÓ¦ÓóÌÐò¼¯³É

×îºó£¬±à¼­Ó¦ÓóÌÐòµÄÐòÁУ¬ÒԱ㽫¾É²Ù×÷ getTranslation Ìæ»»ÎªÐ²Ù×÷ callGetTranslation¡£È»ºóÔËÐиÃÓ¦ÓóÌÐò£¬Ñ¡Ôñ²»Í¬µÄÑ¡ÏîÀ´»ñµÃ×ã¹»µÄÊäÈëºÍ¶ÔÓ¦µÄÊä³ö¡£

Çë×¢Ò⣬Èç¹û²é¿´¸ÃÊý¾Ý¿â£¬¿ÉÄÜ¿´µ½´óÁ¿Î´ÔøÁϵ½µÄÊäÈë²ÎÊý¡£ÕâÊÇÒòΪÐòÁÐÖеĵÚÒ»¸ö²Ù×÷»ñÈ¡Á˹ØÓÚ HTTP ÇëÇóµÄÐÅÏ¢£¬ÕâÊÇÎÒÃÇÔÚ±¾Ê¾ÀýÖиú×ٵIJÙ×÷¡£ÕâЩ¶îÍâµÄ²ÎÊý²»»áµ¼ÖÂÈκÎÎÊÌâ¡£

ʹÓõ¥Ôª²âÊÔ

ÔÚÊý¾Ý¿âÖÐÓµÓÐÐÅÏ¢ºó£¬¾Í¿ÉÒÔʹÓÃËüÀ´ÔËÐе¥Ôª²âÊÔÁË¡£Ê¹ÓôËÄÚÈÝ´´½¨Ò»¸öвÙ×÷¡£ÔÚµÚ 4¡¢13 ºÍ 38 ÐзÅÈëÕýÈ·µÄ±êʶ·û¡£ÔËÐд˲Ù×÷ʱ£¬»á·µ»ØÒÔÏÂ×ֶΣº

match¡ª ²Ù×÷·µ»ØÁËÔ¤ÆÚÊä³öµÄ²âÊÔ°¸ÀýµÄÊýÁ¿

noMatch¡ª ²Ù×÷·µ»ØÁ˲»Í¬ÖµµÄ²âÊÔ°¸ÀýµÄÊýÁ¿

problems¡ª ¼ì²â³öÎÊÌâµÄÊäÈëÖµÁбí

´Ë²Ù×÷µÄ´ó²¿·ÖÄÚÈݶ¼Ê¹ÓÃÁ˱¾ÎÄÖÐ֮ǰʹÓõÄ×é¼þ¡£async.map µ÷ÓÃÊÇÒ»¸öÀýÍâ¡£´Ëº¯Êý½ÓÊÕ 3 ¸ö²ÎÊý£ºÒ»¸öÁбíºÍÁ½¸öº¯Êý¡£È»ºó£¬ËüΪÁбíÖеÄÿһÏîµ¥¶Àµ÷ÓõÚÒ»¸öº¯Êý (iteratee)£¬¾ÍÏñº¯Êýʽ±à³ÌÖÐµÄÆÕͨӳÉäÒ»Ñù¡£²»Í¬Ö®´¦ÔÚÓÚµ÷Óõĺ¯Êý¿ÉÒÔÊÇÒì²½µÄ¡£Ëü»ñÈ¡Á½¸ö²ÎÊý£ºÀ´×ÔÁбíµÄÏîºÍÒ»¸öÔÚ¸ÃÒì²½¹ý³ÌÍê³Éʱµ÷ÓõĻص÷º¯Êý¡£ÕâʹÄúÄܽ«¸ÃÓ³ÉäÓÃÓÚÒì²½º¯Êý ¡ª ÀýÈçµ÷ÓÃÒ»¸ö²»Í¬µÄ OpenWhisk ²Ù×÷¡£µÚÈý¸ö²ÎÊý£¨¿ÉÑ¡²ÎÊý£¬µ«ÕâÀïÒÑʹÓã©ÊÇÒ»¸öÔÚÓ³ÉäÍê³Éºóµ÷Óõĺ¯Êý¡£

async.map(body.rows,
(obj, callback) => {
¡­
callback();
});
}, // end of the iteratable, which is called for every item
(err, results) => {
,,,
} // end of the post map callback
); // end of async.map

ÐÅÏ¢±»ÊÕ¼¯µ½Ò»Ð©±äÁ¿ÖУ¬ÕâЩ±äÁ¿ÔÚ¶Ô iteratee µÄ²»Í¬µ÷ÓÃÖ®¼ä±»¹²Ïí¡£ÔÚһЩ»·¾³ÖУ¬ÕâÒªÇóÄú¿¼ÂÇḬ̈߳²È«ÐÔ£¬µ« Node.js µÄµ¥Ïß³ÌÐÔÖÊ¿ÉÒÔÈ·±£²»»áÓÐÁ½¸öÏß³Ìͬʱ³¢ÊÔ¸ü¸ÄÒ»¸ö±äÁ¿¡£

ÕâÊÇÔÚ JSON ¸ñʽ»¯Æ÷ÖÐÏÔʾµÄÑù±¾½á¹û£¨ÒÔ±ã×îС»¯²»Ïà¹ØµÄ HTTP ±êÍ·£©£º

ͼ 5. Ñù±¾½á¹û

½áÊøÓï

ÔÚ±¾½Ì³ÌÖУ¬Äú¿ª·¢ÁËÒ»¸öÔ­ÐÍÀ´È·¶¨´¿º¯ÊýµÄ²Ù×÷£¨Ê¹ÓÃÏàͬµÄÊäÈëʼÖÕÉú³ÉÏàͬµÄÊä³ö£¬¶øÇÒûÓи±×÷Óã©ÊÇ·ñʵ¼ÊÉÏÓ¦¸ÃÖÁÉÙÓµÓÐÒ»¸ö´¿ÊôÐÔ¡£²»ÐÒµÄÊÇ£¬Äú²»Äܼì²éÖîÈç OpenWhisk ²Ù×÷Ö®ÀàµÄºÚºÐÀ´Á˽⸱×÷Óá£ÎÒ¼ò»¯ÁËÕâ¸öÔ­ÐÍ£¬ÒԱ㾡¿ÉÄÜÇå³þµØ½âÊÍÏà¹Ø¸ÅÄî¡£Èç¹ûÄúÏëʵ¼ÊʹÓÃËü£¬ÔòÐèÒªÌí¼ÓÆäËûÒ»Ð©ÌØÐÔ¡£

1.ÓÅÑŵØÊ§°Ü¡£Ä¿Ç°ÎªÖ¹£¬´Ë´úÂë¼ÙÉèûÓгöÏÖ´íÎó¡£ÕâÓеã¹ýÓÚÀÖ¹Û¡£

2.²»Òª½öµ÷Óñ»²âÊԵIJÙ×÷Ò»´Î£¬¶øÊÇÓ¦¸Ã¶à´Îµ÷ÓÃËü¡£ ÕâÑù£¬²Å¸üÓпÉÄܼì²â³öÎÊÌâ¡£

3.½«Õý±»µ÷ÓõIJÙ×÷µÄÃû³ÆÌí¼Óµ½Êý¾Ý¿â¼üÖУ¨ËüĿǰֻÊÇÊäÈë²ÎÊý£©¡£ÕâÑù¾Í¿ÉÒÔ¶Ô¶à¸ö²Ù×÷ʹÓÃͬһ¸öÊý¾Ý¿â¡£

Õâ 3 ¸öÌØÐÔÏà¶ÔÈÝÒ×ʵÏÖ£¬µ«ÈÔÐèÒª½« OpenWhisk ²Ù×÷×÷ΪºÚºÐ¶Ô´ý¡£Ò»¸ö¸ü¾ßÌôÕ½µÄÌØÐÔÊÇΪ²Ù×÷ÓëÆäËûϵͳ£¨±ÈÈç Cloudant£©Ö®¼äµÄÁ¬½Ó½¨Á¢´úÀí£¬À´½«²»ÊÇ´¿º¯ÊýµÄ²Ù×÷ת»»Îª´¿º¯Êý£»Îª´Ë£¬Äú¿ÉÒÔÔÚǰһ´ÎʹÓÃÏàͬÊäÈëÖ´Ðе÷ÓÃÀ´Ìṩ״̬ºó£¬´ÓÆäËûϵͳÌṩÏàͬµÄ״̬ÐÅÏ¢£¬Ïû³ý¸Ã²Ù×÷³¢ÊÔ´´½¨µÄÈκθ±×÷Óá£

   
2084 ´Îä¯ÀÀ       28
Ïà¹ØÎÄÕÂ

΢·þÎñ²âÊÔÖ®µ¥Ôª²âÊÔ
һƪͼÎÄ´øÄãÁ˽â°×ºÐ²âÊÔÓÃÀýÉè¼Æ·½·¨
È«ÃæµÄÖÊÁ¿±£ÕÏÌåϵ֮»Ø¹é²âÊÔ²ßÂÔ
È˹¤ÖÇÄÜ×Ô¶¯»¯²âÊÔ̽Ë÷
Ïà¹ØÎĵµ

×Ô¶¯»¯½Ó¿Ú²âÊÔʵ¼ù֮·
jenkins³ÖÐø¼¯³É²âÊÔ
ÐÔÄܲâÊÔÕï¶Ï·ÖÎöÓëÓÅ»¯
ÐÔÄܲâÊÔʵÀý
Ïà¹Ø¿Î³Ì

³ÖÐø¼¯³É²âÊÔ×î¼Ñʵ¼ù
×Ô¶¯»¯²âÊÔÌåϵ½¨ÉèÓë×î¼Ñʵ¼ù
²âÊԼܹ¹µÄ¹¹½¨ÓëÓ¦ÓÃʵ¼ù
DevOpsʱ´úµÄ²âÊÔ¼¼ÊõÓë×î¼Ñʵ¼ù